2012-11-11 64 views
0

我有一个类Product和一个类Part,其中每个部分只能属于一个产品。每种产品都有其部件清单,但一部分没有提及其产品。hibernate集合映射 - 如何将集合所有者id作为外键放入集合的元素表中?

@Entity 
@Table (name= "products") 
class Product { 
    @Id 
    @GeneratedValue 
    @Column(name = "Id") 
    int id; 

    @Column(name = "Name") 
    String name; 

    @??? 
    List<Part> myParts; 

部分:

@Entity 
@Table (name= "parts") 
class Part { 
    @Id 
    @GeneratedValue 
    @Column(name = "Id") 
    int id; 

    @Column(name = "Name") 
    String name; 
} 

在我的数据库中的表“产品”不存储有关的部分信息,但“零件”表跟踪产品的一排“PRODUCT_ID”。

产品:

| id |名称|

部件:

| id |名称| procuct_id |

我认为这是相当正常的OO-和ORM“世界”这种相反的方法,但我无法找到如何坚持我的对象与休眠到这种结构!

对于一对多注释,我只找到部分id已存储在产品表中的示例。 对于多对一,它似乎需要我的零件对象中的产品参考,不是吗?

我希望我错了! ;)

有没有人知道是否有一种方法来映射这个没有引用我的类或表结构?

(我会非常非常高兴,如果你可以用注释解释它,而不是使用XML :))

回答

0

我想你说的是一个一对多的单向映射,尝试一些如下:

@OneToMany 
@JoinColumn(name="product_id") 
List<Part> myParts; 

你可以在这里看到一个例子,@OneToMany。查看该链接中的“示例3”。


注:因为你有product_idparts表的外键,建议也有在PartProduct类型字段。

+0

哦好吧,它的工作原理! :)我在我的数据库中有一个错误... 在哪种情况下可能是一个问题,而不是有这样的领域? 我真的很想避免它,因为从面向对象的角度来看它会非常“丑陋”,不是吗?! ;) – chris

+0

@chrissy:这只是一个建议。我不会有任何问题,但是对于设计来说,数据库中的产品表到零件表都有一个外键,但该关系实际上是隐藏的,并且不会反映在您的ORM映射中。 –