gpt4 book ai didi

Hibernate Jpa注解: Problem with Embedded Id

转载 作者:行者123 更新时间:2023-12-02 22:36:32 26 4
gpt4 key购买 nike

我有这样的数据库架构:

表_A[1]-->[n]表_C和表_B[1]-->[n]表_C

现在,Table_C 的 PrimaryKey 是一个具有外键(相对于 Table_A)和外键(相对于 Table_B)的 EmbeddedId。如何注释此注释?

我的解决方案是:

@Entity
public class TableA{
@Id @column(name="ID")
public int id;

@OneToMany(mappedBy="tableA")
public List<TableC> listOftableC;
}

@Entity
public class TableB{
@Id @column(name="ID")
public String id;

@OneToMany(mappedBy="tableB")
public List<TableC> listOftableC;

}

@Entity
public class TableC{
@EmbeddedId
public TableCPK idComposite;
}

@Embeddable
public class TableCPK{

@ManyToOne
@JoinColumn(name = "ID_TABLE_A", referencedColumnName="ID")
public TableA tableA;

@ManyToOne
@JoinColumn(name = "ID_TABLE_B", referencedColumnName="ID")
public TableA tableB;
}

最佳答案

当您遵循 JPA 规范时,您会注意到不需要映射 tableC。您可以只使用可连接的

类似这样的事情

@Entity
public class TableA{
@Id
@column(name="ID")
public int id;
@ManyToMany
@JoinTable(name="TableC",
joinColumns = {@JoinColumn(name = "ID_TABLE_A", referencedColumnName="ID")},
inverseJoinColumns = {@JoinColumn(name = "ID_TABLE_B", referencedColumnName="ID")
})
public List<TableB> listOftableB;
}
@Entity
public class TableB{
@Id @column(name="ID")
public String id;
@OneToMany(mappedBy="listOftableB")
public List<TableA> listOftableA;
}

如果您想映射 JoinTable 中的某些内容,您也可以将其定义为实体。你可以像这样映射tableC

@Entity
public class TableC{
@EmbeddedId
private MyId id;
@ManyToOne
@JoinColumn(name = "ID_TABLE_A", insertable = false, updatable = false)
private TableB tableA;
@ManyToOne
@JoinColumn(name = "ID_TABLE_B", insertable = false, updatable = false)
private TableB tableB;

@Column(name="extra_field")
private String extraField;
}

@Embeddable
public class MyId{
@Column(name="ID_TABLE_A")
private int idTableA;
@Column(name="ID_TABLE_B")
private int idTableB;
// equals, hascode,...
}

通过将对象设置为可插入/可更新为 false,您可以多次映射相同的属性。 id 中的其他属性当然不可更新,因为这会破坏你的 pk。

关于Hibernate Jpa注解: Problem with Embedded Id,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6594986/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com