Ebean EmbeddedID 매핑 컬럼이 잉글리시 루칭 관계에 있습니다
-
21-12-2019 - |
문제
컴포지 된 키 (EmbeddedID)를 만들려고 할 때 Ebean에 문제가 발생합니다.
이것은 내가 가진 것의 초안입니다 :
@Entity public class EntityA extends Model{
@Id
private String ID;
@OneToMany
private List<EntityB> listEntitesB;
public EntityA(){
ID = UUID.randomUUID();
}
}
@Entity public class EntityB extends Model{
@EmbeddedId
private EntityB_PK ID;
@ManyToOne
@JoinColumn(name="entityA_fk", referencedColumnName="listEntitiesB")
private EntityA entityA;
public EntityB(String entityB_ID){
ID = new EntityB_PK(UUID.randomUUID(), entityB_ID);
}
}
@Embeddable public class EntityB_PK{
private String entityB_ID;
private String entityA_FK_ID;
public EntityB_PK(String entB_ID, String entA_FK_ID){
entityB_ID = entB_ID;
entityA_FK_ID = entA_FK_ID;
}
}
.
메모 : Java 1.6으로 EBEAN 4.1.4를 사용하고 있습니다.
이 코드는 잘 작동하지만 해결하려는 Perk가 있습니다. 데이터베이스의 결과 테이블은 다음과 같습니다.
- entityb_id [1 차]
- entitya_fk_id [1 차]
- entitya_fk
"entitya_fk_id"열을 고려한 마지막 열이 중복되는 것을 볼 수 있습니다.
내가 갖고 싶은 일은 무엇입니까?
- eBean에게 자신의 열을 만드는 대신 Association @manytoone에 대한 "entitya_fk_id"열을 사용하도록 EBEAN을 알리고 싶습니다.
해결책
이 문제를 해결하려면 다음을 수행해야합니다.
- entityb.entitya entityb.id.entitya_fk_id 와 동일한 열에 맵핑하십시오.
- intityb.entitya @joincolumn 주석의 '삽입 가능'및 '업데이트 가능'속성 설정
- entityb.entitya 의 setter override
여기에 코드가 있습니다.
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;
}
}
.제휴하지 않습니다 StackOverflow