gpt4 book ai didi

spring - 在 JoinColumn 注释的字段上编写 CRUDRepository 的 findBy() 方法

转载 作者:行者123 更新时间:2023-12-04 04:10:55 25 4
gpt4 key购买 nike

我对 Spring JPA 有点陌生,所以如果我的问题听起来很基本,我提前道歉。我有 2 个实体对象:OrderInfo 和 PersonInfo。类(class)如下:

@Entity
@Table(name="order_info")
@NamedQuery(name="OrderInfo.findAll", query="SELECT o FROM OrderInfo o")
public class OrderInfo implements Serializable {

@Column(name="order_number")
private String orderNumber;

//bi-directional many-to-one association to PersonInfo
@ManyToOne
@JoinColumn(name="person_id")
private PersonInfo personInfo;

public String getOrderNumber() {
return this.orderNumber;
}

public void setOrderNumber(String orderNumber) {
this.orderNumber = orderNumber;
}

public PersonInfo getPersonInfo() {
return this.personInfo;
}

public void setPersonInfo(PersonInfo personInfo) {
this.personInfo = personInfo;
}


}

和 Person 实体:
@Entity
@Table(name="person_info")
@NamedQuery(name="PersonInfo.findAll", query="SELECT p FROM PersonInfo p")
public class PersonInfo implements Serializable {

//bi-directional many-to-one association to OrderInfo
@OneToMany(mappedBy="personInfo")
private List<OrderInfo> orderInfos;

public List<OrderInfo> getOrderInfos() {
return this.orderInfos;
}

public void setOrderInfos(List<OrderInfo> orderInfos) {
this.orderInfos = orderInfos;
}

public OrderInfo addOrderInfo(OrderInfo orderInfo) {
getOrderInfos().add(orderInfo);
orderInfo.setPersonInfo(this);

return orderInfo;
}

public OrderInfo removeOrderInfo(OrderInfo orderInfo) {
getOrderInfos().remove(orderInfo);
orderInfo.setPersonInfo(null);

return orderInfo;
}

}

这两个类是在 Eclipse 中使用 JPA 的 create entityfromtable 选项自动生成的。

现在,我正在尝试编写一个 CRUDRepository 来获取给定 orderNumber 和 personId 的 OrderInfo。如果我在 OrderInfo 对象中有一个 personId 字段,我可以写一些类似的东西
@Repository
public interface OrderRepository extends CrudRepository<OrderInfo, Integer>{
public OrderInfo findByPersonIdAndOrderNumber(@Param("personId") Long personId, @Param("orderNumber") String orderNumber);

}

但是,现在 OrderInfo 实体没有 personId。相反,它引用了一个 Person(同样,我没有编写实体类。它们是由 Eclipse 自动生成的)。我现在应该如何编写 findBy() 方法?

提前致谢。

最佳答案

我找到了另一个解决方案,假设我们有一个 User 实体和 Message 实体。

@Entity
public class Message {

@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;

@NotNull
@Type(type="org.jadira.usertype.dateandtime.joda.PersistentDateTime")
private DateTime date;

@ManyToOne
@JoinColumn(name = "id_user_sender")
private User userSender;

@NotNull
private Long idUserReceiver;

@NotNull
@Length(min = 10)
private String message;

@NotNull
private String idConversation;

@NotNull
Boolean userHasRead;

//Getters and Setters

}



@Entity
public class User implements Serializable {

@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;

//Some other properies like email,name etc
//Getters and setters
}

现在我需要通过 id_user_sender 查找所有消息。
public interface MessageRepository extends JpaRepository<Message,Long>,TransactionRepositoryCustom {
List<Message> findByUserSenderId(Long idUser);
}

说明:
在消息实体中,我有一个名为“userSender”的用户对象。 userSender 有一个名为“id”的字段。

所以'findByUserSenderId' 在userSender 对象中搜索id。

另一种可能性是将完整的 User 对象传递给消息存储库,如下例所示:(User 对象必须仅包含 id)
public interface MessageRepository extends JpaRepository<Message,Long>,TransactionRepositoryCustom {
List<Message> findByUserSender(User user);
}

关于spring - 在 JoinColumn 注释的字段上编写 CRUDRepository 的 findBy() 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28786968/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com