JPA多对一关系

JPA多对一关系,jpa,Jpa,我是JPA的初学者,需要一些帮助来获取JPA中的多对一关系 我有以下实体 存储所有用户信息的用户。用户扩展了Audiatable抽象类,该类用于保存auidt参数,如上次修改日期、创建日期等 我正在尝试添加另一个字段作为lastUpdatedByUser,该字段应该从lastUpdatedBy获取,我正在尝试为其添加多个关系。 但这段关系不知怎么地不起作用,我是不是做错了什么 AuditableEntity.java public abstract class AuditableEntity&l

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

我有以下实体

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

我正在尝试添加另一个字段作为lastUpdatedByUser,该字段应该从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;
公共抽象类AuditableEntity实现了Auditable{
私有静态最终长serialVersionUID=1L;
@列(name=“cruserid”)
私人长工;
@列(name=“crdate”)
@类型(类型=JPA常量。类型\本地\日期\时间)
私有LocalDateTime-createdOn;
@列(name=“chuserid”)
私有Long lastedby;
@列(name=“chdate”)
@类型(类型=JPA常量。类型\本地\日期\时间)
私有LocalDateTime LastUpdateOn;
@短暂的
@manytone(fetch=FetchType.LAZY,targetEntity=User.class)
@JoinColumn(name=“usrId”,referencedColumnName=“chuserid”)
私人用户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;
公共类用户扩展AuditableEntity{
私有静态最终长serialVersionUID=1L;
@身份证
@GeneratedValue(策略=GenerationType.IDENTITY)
@列(name=“usrId”)
私人长id;
@列(name=“usrName”)
私有字符串名称;
@列(name=“loginame”)
私有字符串登录名;

}

好吧,您将该关联标记为@Transient,这意味着该字段不是持久的,应该被JPA忽略

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

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

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

您好,thnx用于ans,但问题是我们无法删除lastUpdateBy…它已经在现有代码中的很多地方被引用了…所以我们想添加一个临时字段lastUpdateByUser,只是为了保存我们现在的目的…它的设计很奇怪,但由于时间限制,折射被搁置。如果它只在只读模式下使用,您应该能够要删除LastUpdateByUser的映射,如上所示,并将
lastUpdateBy
上的列标记为不可插入和不可更新。Thnx同样,它根据您的上一条注释工作,但不幸的是,lastUpdateBy不仅在只读模式下使用…对于每个实体,它将被调用以更新执行上次更新的用户ID。