【问题标题】:fetch only User related records from other table JPA query从其他表 JPA 查询中仅获取用户相关记录
【发布时间】: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&lt;RideTransaction&gt; findRideHistoryOfUser(Long userId);
  • 这可以使用传递User 对象吗?

标签: hibernate spring-boot jpa


【解决方案1】:

您正在创建一个 RideTransaction 列表,您需要创建一个用户列表,同样在 SQL 查询的开头您选择的是 RideTransaction,而不是用户。

【讨论】:

  • 感谢您的回复..我不想要user 我想要RideTransaction 特定user 的记录。
  • 你能帮帮我吗?
  • hmm,如果你喜欢普通的 SQL 查询,你可以使用 @Query(nativeQuery = true, value = "select here")
  • 我建议使用用户的 id 来查找匹配项
  • @Query(nativeQuery=true, value="select * from RideTransaction where user.id = ?1")
【解决方案2】:

这似乎是一种混乱。什么是真正的表关系?如果User 可以有多个RideTransaction(@OneToMane 用于RideTransaction),那么您得到的结果是可以的(尽管您有注释@OneToOne)。如果他不这样做,为什么要在存储库中声明 List 查询? 试试你自己 - 什么会返回一个查询select * from RideTransaction where user = '{some_user_id}'

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-20
    • 2018-01-25
    相关资源
    最近更新 更多