2012-03-07 114 views
3

我知道,@SecondaryTable问题发表了很多次,所以,如果有相同的(我还没有找到它),请给我链接或建议。休眠:@SecondaryTable不起作用

我在我的数据库(firstTablesecondTable)两个表中,两个POJO Hibernate类(FirstTablePojoSecondTablePojo)。

+----------+    +-----------+ 
|firstTable|    |secondTable| 
|----------+    |-----------+ 
|featureId |------------>|featureId |(secondTable's primary key) 
|foo  |    |featureName| 
|bar  |    +-----------+ 
+----------+ 

我想表明从从单一的列表对象的JSP这两个表中的字段,我决定使用@SecondaryTable。这两个表通过featureId字段连接(这是secondTable的主键),我想要secondTable中的featureName与来自firstTable的字段一起显示。该FirstTablePojo由该注释之前:

@SecondaryTable(name="secondTable", 
    [email protected](name="featureId", 
             referencedColumnName = "featureId")) 

我加入这个属性来FirstTablePojo(与getter和setter):

@ManyToOne 
@JoinColumn(name="featureId", table="secondTable") 
String featureName; 

当的<c:forEach items="${features}" var="feature">帮助,我得到各个${feature.foo}foo是在我使用@SecondaryTable)和${feature.featureName}之前在FirstTablePojo中的房产,我看到每个foo,但是没有出现featureNames。如果有人能告诉我我在这里错过了什么以及为什么来自另一张桌子的功能名不出现在FirstTablePojo对象列表中,那将会很棒。

+0

你如何解决你的问题?我处于相同的情况...... – davioooh 2012-05-03 09:16:14

+0

'featureId'是主表中的主键?或“secondTable”的外键? – davioooh 2012-05-03 09:31:45

+0

@davioooh哦,同时我发布了这个问题http://stackoverflow.com/questions/9627102/selecting-from-two-tables-in-hibernate,所以他们可能是大约相同的表。 – 2012-05-03 09:49:00

回答

7

注释@SecondaryTable的要点是将单个实体的字段映射到多个表,就好像这些表合并成一个表一样。

@ManyToOne用于映射两个实体之间的多对一关联。但你只有一个。在这种情况下没有意义。 @JoinColumn用于指示一个字段被映射到构成... join列的列,即另一个表的外键。所以它也没有意义。

只需使用下面的映射:

@Column(name="featureName", table="secondTable") 
String featureName; 

这很好解释的,用一个例子,在Hibernate documentation