繁体   English   中英

Hibernate级联另一个数据库中的另一个ID

[英]Hibernate Cascade another Id from another database

例如,我有一个A级,级联到B级:

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;
    }
}

我有一个B,它有自己的ID和一个包含A的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;
    }

保存A后如何自动分配aId? 我希望设置aId,但总是收到一条错误消息,提示无法将A_ID设置为null。

谢谢!

当使用衍生标识符与共享的映射,不仅需要把@MapsId anotation的关系,而是anotate领域引用关系ID与@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;
    }

    @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 ,从而使持久性提供程序忽略了将该字段写入数据库的操作。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM