【发布时间】:2018-05-04 11:10:35
【问题描述】:
我想从RideTransaction 表中获取唯一特定的User 表记录。
到目前为止,我已经尝试了以下查询
@Query("SELECT r FROM RideTransaction r WHERE r.user=?1 AND r.status='RIDING' OR r.status='OUTSTANDING' OR r.status='COMPLETED'")
List<RideTransaction> findRideHistoryOfUser(User user);
另一个是
@Query("SELECT r FROM RideTransaction r WHERE r.user=?1 AND r.status='RIDING' OR r.status='OUTSTANDING'")
List<RideTransaction> findAllCurrentRidingOrOutstanding(User user);
但是当我执行上述代码时,我得到了所有 RideTransaction 记录,而不是特定的 User 记录。
RideTransaction 表:
@Entity
public class RideTransaction {
@Id
@GenericGenerator(name = "ridetransection_id_generator", strategy = "com.greensaikil.entity.idgenerator.RideTransectionIdGenerator")
@GeneratedValue(generator = "ridetransection_id_generator")
private long id;
@OneToOne(cascade = { CascadeType.ALL })
@JoinColumn(name = "USER", foreignKey = @ForeignKey(name = "FK_RideTransection_User"))
private User user;
@OneToOne(cascade = { CascadeType.ALL })
@JoinColumn(name = "DROP_UP_STAND", foreignKey = @ForeignKey(name = "FK_RideTransection_Stand_DropUp"))
private Stand drop_up_stand;
@OneToOne(cascade = { CascadeType.ALL })
@JoinColumn(name = "PICK_UP_STAND", foreignKey = @ForeignKey(name = "FK_Transection_Stand_PickUp"))
private Stand pick_up_stand;
@OneToOne(cascade = { CascadeType.ALL })
@JoinColumn(name = "BICYCLE", foreignKey = @ForeignKey(name = "FK_Transection_Bicycle"))
private Bicycle bicycle;
private Date pick_up_time;
private Date drop_off_time;
@OneToOne(cascade = { CascadeType.ALL })
@JoinColumn(name = "PICK_UP_LOCATION", foreignKey = @ForeignKey(name = "FK_RideTransection_Location_PickUp"))
private Location pick_up_location;
@OneToOne(cascade = { CascadeType.ALL })
@JoinColumn(name = "DROP_UP_LOCATION", foreignKey = @ForeignKey(name = "FK_RideTransection_Location_DropUp"))
private Location drop_off_location;
@OneToMany(cascade = CascadeType.ALL, fetch = FetchType.EAGER)
private Set<Payment> payments = new HashSet<Payment>();
private long booking_ride_time;
private BigDecimal total_payment;
private BigDecimal remaining_outstanding;
private BigDecimal discount;
private Date booking_time;
private long total_ride_time;
private long extra_ride_time;
private BigDecimal total_rental;
@Enumerated(EnumType.STRING)
private RideStatus status;
@OneToMany(cascade = CascadeType.ALL, fetch = FetchType.EAGER)
private Set<Image> image;
@OneToMany(cascade = CascadeType.ALL, fetch = FetchType.EAGER)
private Set<RideTracking> ride_tracking = new HashSet<RideTracking>();
//setters and getters
用户表:
public class User {
@Id
@GeneratedValue(generator = "uuid2")
@GenericGenerator(name = "uuid2", strategy = "uuid2")
@Column(columnDefinition = "BINARY(16)", name = "USERID")
private UUID id;
@Column(name = "USERNAME")
private String username;
@Column(name = "NAME")
@NotNull
private String name;
@Column(name = "USEREMAIL")
private String email;
@Column(name = "USERPHONE")
private Long phone;
//setters and getters
请帮我查询以获取仅User 记录。
【问题讨论】:
-
嘿任何人都有解决方案
-
你有
id的用户吗?如果是,那么您可以通过提供用户 ID 而不是对象来测试您的查询。@Query("SELECT r FROM RideTransaction r WHERE r.user.id=?1 AND r.status='RIDING' OR r.status='OUTSTANDING' OR r.status='COMPLETED'") List<RideTransaction> findRideHistoryOfUser(Long userId); -
这可以使用传递
User对象吗?
标签: hibernate spring-boot jpa