休眠:@SecondaryTable不起作用



我知道,@SecondaryTable问题已经发布了很多次,所以,如果有相同的问题(我还没有找到),请给我链接或建议。

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

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

我想在jsp中的单个列表对象中显示这两个表中的字段,我决定使用@SecondaryTable。这两个表由featureId字段(它是secondTable的主键)连接,我希望secondTable中的featureNamefirstTable中的字段一起显示。FirstTablePojo前面有以下注释:

@SecondaryTable(name="secondTable", 
    pkJoinColumns=@PrimaryKeyJoinColumn(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之前在FirstTablePojo中的属性)和${feature.featureName},我看到了每个foo,但没有出现featureNames。如果有人能告诉我这里遗漏了什么,以及为什么另一个表中的功能名称没有出现在FirstTablePojo对象列表中,那就太好了。

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

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

只需使用以下映射:

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

Hibernate文档中通过一个示例对此进行了很好的解释。

如果您想将表示另一个实体的ID的外键字段放入辅助表中,那么使用@JoinColumn是有意义的。在这种情况下,正确的方法是:

 @OneToOne
 @JoinColumn(name="another_entity_id", table="secondTable")
 AnotherEntity anotherEntity;

最新更新