Jpa EJB3实体多列同一对象引用问题
我有一个实体A,它有3个属性,引用了另一个实体B。 从关系角度来看,这很好,因为我可能有表B中的3个不同id存储为表a中的不同列。为了进一步说明,我的表a有3列,分别称为经理id、主管id、工人id。所有三列都引用了员工表(表B)。 但在JPA中,当实体管理器构建实体A(对应于表A)时,如果三列中有一列以上具有相同的id,则实体A将不具有实体B的单个对象,而是指向相同的引用。(例如,如果经理id和主管id为“12345”,则在构建实体A时,映射到经理id和主管id的字段将指向id为“12345”的实体B的同一引用对象 这在提交之前是可以的。每当我更改manager_id tp“67891”时,主管id也会与此id一起存储,因为它们指向相同的引用。 这是错误的。 我如何配置框架来获取每个属性的单个引用对象,而不管它们是否指向同一个对象,或者指定实体管理器仅保留已更改的字段? 我不想为此编写本机查询Jpa EJB3实体多列同一对象引用问题,jpa,entity,ejb-3.0,Jpa,Entity,Ejb 3.0,我有一个实体A,它有3个属性,引用了另一个实体B。 从关系角度来看,这很好,因为我可能有表B中的3个不同id存储为表a中的不同列。为了进一步说明,我的表a有3列,分别称为经理id、主管id、工人id。所有三列都引用了员工表(表B)。 但在JPA中,当实体管理器构建实体A(对应于表A)时,如果三列中有一列以上具有相同的id,则实体A将不具有实体B的单个对象,而是指向相同的引用。(例如,如果经理id和主管id为“12345”,则在构建实体A时,映射到经理id和主管id的字段将指向id为“12345”
任何建议都将不胜感激!如果数据库表的manager\u id和supervisor\u id列具有相同的值,则实体中的相应属性将指向同一对象。这是正常、正确的JPA行为,您不能也不应该尝试避免 您谈到更改manager_id值。您是如何做到的?我相信您应该能够更改相应属性所引用的对象,并让JPA正确更改数据库中的值 代码:
@Entity
public class A {
@ManyToOne @Column(name="manager_id")
private B manager;
@ManyToOne @Column(name="supervisor_id")
private B supervisor;
@ManyToOne @Column(name="worker_id")
private B worker;
public void setManager(B manager) {
this.manager = manager;
}
}
A a;
B b67891;
a.setManager(b67891);
要查看完整、独立的示例,请参阅: