0

에서 다른 아이디, 나는 B에 계단식으로 클래스 A가 있습니다최대 절전 모드 캐스케이드 예를 들어 다른 데이터베이스

public class A{ 

    private String id; 
    private Set<B> bs = new HashSet<B>(0); 

    @Id 
    @GenericGenerator(name = "seq_id", strategy = generators.SequenceIdGenerator") 
    @GeneratedValue(generator = "seq_id") 
    @COLUMN(name="id" unique = true, nullable = false, length = 28) 
    public void getId(){ 
     return this.id; 
    } 

    @OneToMany(fetch = FetchType.LAZY, mappedBy = "A") 
    @Cascade({CascadeType.SAVE_UPDATE, CascadeType.DELETE, CascadeType.PERSIST}) 
    public void getBs(){ 
     return bs; 
    } 
} 

그리고 그것이 자신의 ID와

public class B 

    String id; 
    String aId; 
    A a; 

    @Id 
    @GenericGenerator(name = "seq_id", strategy = "generators.SequenceIdGenerator") 
    @GeneratedValue(generator = "seq_id") 
    @Column(name = "ID", unique = true, nullable = false, length = 28) 
    public String getId() { 
     return this.id; 
    } 

    @Column(name = "A_ID", nullable = false, length = 28) 
    public String getAId() { 
     return aId; 
    } 

    public void setAId(String aId) { 
     this.aId = aId; 
    } 

    @ManyToOne(fetch = FetchType.LAZY) 
    @JoinColumn(name = "A_ID", nullable = false, insertable = false, updatable = false) 
    @MapsId("aId") 
    public Admission getAdmission() { 
     return this.admission; 
    } 

    public void setAdmission(Admission admission) { 
    this.admission = admission; 
    } 
에서 ID를 포함하는 열의가 B를

어떻게 A를 저장하면 자동으로 ID를 할당합니까? 나는 설정하려고하지만 A_ID를 null로 설정할 수 없다는 오류 메시지가 항상 나타납니다.

감사합니다!

답변

1

공유 매핑과 함께 파생 식별자를 사용하는 경우 @MapsId 주석을 관계에 넣을뿐 아니라 @Id 주석을 사용하여 관계 ID를 참조하는 필드의 주석을 달 수도 있습니다.

은 (ommited 세터)를 수행하는 방법을 참조하십시오 :

public class B { 
    String id; 
    String aId; 
    A a; 

    @Id 
    @GenericGenerator(name = "seq_id", strategy = "generators.SequenceIdGenerator") 
    @GeneratedValue(generator = "seq_id") 
    @Column(name = "ID", unique = true, nullable = false, length = 28) 
    public String getId() { 
     return this.id; 
    } 

    @Id 
    public String getAId() { 
     return aId; 
    } 

    @ManyToOne(fetch = FetchType.LAZY) 
    @JoinColumn(name = "A_ID", nullable = false) 
    @MapsId("aId") 
    public A getA() { 
     return this.a; 
    } 
} 

다른 실수는 당신이 지속성 공급자가 데이터베이스에이 분야의 글을 무시하고, updatable = falseinsertable = false로 관계를 주석이다.