JPA多对一关系

  • 本文关键字:关系 多对一 JPA jpa
  • 更新时间 :
  • 英文 :


我对JPA有点初学者,需要一些帮助来获取JPA中的多对一关系。

我有以下实体。

存储所有用户信息的用户。用户扩展了Audiable抽象类,该类用于保存auidt参数,如上次修改日期、创建日期等。

我正在尝试添加另一个字段作为lastUpdatedByUser,该字段应从我正在尝试为其添加Many-One关系的lastUpdatedBy中获取。但这种关系不知怎么就不起作用了,我是不是做错了什么?

AuditableEntity.java

public abstract class AuditableEntity<T extends Entity<T, ID>, ID> implements Auditable {
private static final long serialVersionUID = 1L;
@Column(name = "cruserid")
private Long createdBy;

@Column(name = "crdate")
@Type(type = JpaConstants.TYPE_LOCAL_DATE_TIME)
private LocalDateTime createdOn;
@Column(name = "chuserid")
private Long lastUpdatedBy;
@Column(name = "chdate")
@Type(type = JpaConstants.TYPE_LOCAL_DATE_TIME)
private LocalDateTime lastUpdatedOn;
@Transient
@ManyToOne(fetch = FetchType.LAZY, targetEntity = User.class)
@JoinColumn(name = "usrId", referencedColumnName = "chuserid")
private User lastUpdatedByUser;

User.java

public class User extends AuditableEntity<User, Long> {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "usrId")
private Long id;
@Column(name = "usrName")
private String name;
@Column(name = "loginame")
private String loginName;

}

好吧,您用@Transient标记了关联,这意味着该字段不是持久的,JPA应该忽略它。

您似乎还有两个不同的字段来存储相同的信息:lastUpdatedBylastUpdateByUser。删除第一个,并将第二个映射为

@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "chuserid")
private User lastUpdatedByUser;

这告诉该关联是用户实体的ManyToOne(无需指定targetEntity,因为它是字段的类型),并且该关联由可审核实体的表中名为"chuserid"的联接列具体化,和引用用户实体的ID(referencedColumnName仅在使用复合ID时有用,或者在通过作为ID的列引用实体时有用)

最新更新