为了解决这个问题,我们必须:
- 将EntityB.entityA映射到与EntityB.ID.entityA_FK_ID相同的列
- 设置EntityB.entityA @JoinColumn批注的’insertable’和’updateable’属性
- EntityB.entityA的替代设置器
这是代码:
EntityA.java:
@Entity public class EntityA extends Model { @Id private String ID; @oneToMany(mappedBy="entityA") public List<EntityB> listEntitesB; public static Finder<String,EntityA> find = new Finder<String,EntityA>( String.class, EntityA.class ); public EntityA() { ID = UUID.randomUUID().toString(); } public String getID() { return ID; }}EntityB.java:
@Entity public class EntityB extends Model { @EmbeddedId private EntityB_PK ID; @ManyToOne @JoinColumn(name = "entityA_fk_id", insertable = false, updatable = false) private EntityA entityA; public EntityA getEntityA() { return entityA; } public void setEntityA(EntityA aEntityA) { entityA = aEntityA; ID.entityA_FK_ID = aEntityA.getID(); } public EntityB(String entityB_ID){ ID = new EntityB_PK(UUID.randomUUID().toString(), entityB_ID); } public String getID() { return ID.entityB_ID; }}EntityB_PK.java:
@Embeddable public class EntityB_PK implements Serializable { public String entityB_ID; @Column(name="entityA_fk_id") public String entityA_FK_ID; public EntityB_PK(String entB_ID, String entA_FK_ID){ entityB_ID = entB_ID; entityA_FK_ID = entA_FK_ID; } @Override public int hashCode() { return entityB_ID.length() + entityA_FK_ID.length(); } @Override public boolean equals(Object obj) { if (this == obj) return true; EntityB_PK b = (EntityB_PK)obj; if(b==null) return false; if (b.entityB_ID.equals(entityB_ID) && b.entityA_FK_ID.equals(entityA_FK_ID)) { return true; } return false; }}


