我有点难以定义一个Hibernate实体:
假设我在数据库中有以下两个表:
(A)
(B)
其中(A)的元素指向(B)的主键;所以FK和PK之间存在3个一对一的关系。 我假设3个具有不同mappedBy条件的OneToOne语句不是要走的路,是吗?已经过了漫长的一天 - 我可能只是没有得到它;)
感谢您的帮助!
答案 0 :(得分:0)
你当然可以通过一对一的关系来做到这一点。你的A类中有三个公司对象,以及适当的映射。
如果我们能看到代码和hibernate映射,那将会有所帮助。
答案 1 :(得分:0)
实现A类的最简单方法,其中3个ManyToOne关系指向ClassB
@Entity
class ClassA {
//@ID
//private id;
@ManyToOne
private ClassB from;
@ManyToOne
private ClassB toCompany;
@ManyToOne
private ClassB viaCompany;
}
不起作用,因为每个实体都需要一个ID。 - 您可以尝试通过使用组合ID(由三个关联组成)来克服此问题,但我想这会导致实现包含与其他实体的关联的ID的麻烦。
@see Hibernate/persistence without @Id
Hibernate提供的另一种方式是所谓的三元关联。 - 在这种情况下,您以三元m:n关系的形式对完整的表格A进行建模。 - 但这也是一项非常复杂的任务。
@see http://docs.jboss.org/hibernate/core/3.5/reference/en/html/collections.html#collections-ternary
答案 2 :(得分:0)
如果我理解正确,您希望数据库看起来像这样:
tableA
- id
- fromCompanyId (references tableB.id)
- toCompanyId (references tableB.id)
- viaCompanyId (references tableB.id)
tableB
- id
- description
如果是这样,你当然可以拥有这个。您只需要覆盖关系的默认列名,以便每个关联都有自己的列名,而不是回退到默认名称,这将使三个关联具有相同的名称,从而导致问题。
我不同意OneToOne,但我认为这是一个有意识的决定。