문제

컴포지 된 키 (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을 알리고 싶습니다.
도움이 되었습니까?

해결책

이 문제를 해결하려면 다음을 수행해야합니다.

  1. entityb.entitya entityb.id.entitya_fk_id
  2. 와 동일한 열에 맵핑하십시오.
  3. intityb.entitya @joincolumn 주석의 '삽입 가능'및 '업데이트 가능'속성 설정
  4. entityb.entitya
  5. 의 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;
        }
    }
    
    .

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top