java - Hibernate Cascade 来自另一个数据库的另一个 ID

标签 java hibernate hibernate-mapping hibernate-annotations hibernate-cascade

例如,我有 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 注解,还需要使用 @Id 对引用关系 ID 的字段进行注解> 注释。

看看如何做(省略 setter ):

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

关于java - Hibernate Cascade 来自另一个数据库的另一个 ID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40466400/

相关文章:

java - Android 使用 Arrays.asList 方法创建不正确的数组列表

java - spring jpa onetomany 连接表审计

mysql - 基准的选择和更新查询数量?

java - 分离的实体传递到持久化 : JPA inheritance

java - hibernate 映射<键,设置<值>>

java - 如何从具有多个模块的项目中获取正确的 list ? [JAVA]

java - Mockito.when 在测试方法体内不起作用

java - JSP 在 tomcat 上找不到类错误 org.hibernate.Session

hibernate - 当表具有 UUID 字段时,我可以使用 Hibernate 工具对 Postgresql 数据库进行逆向工程吗?

java - Firestore 在 recyclerview 中检索具有限制的文档