我知道,@SecondaryTable
问题已多次发布,所以,如果有相同的问题(我还没有找到),请给我链接或建议。
我的数据库中有两个表(firstTable
和secondTable
),两个POJO Hibernate类(FirstTablePojo
和SecondTablePojo
)。
+----------+ +-----------+
|firstTable| |secondTable|
|----------+ |-----------+
|featureId |------------>|featureId |(secondTable's primary key)
|foo | |featureName|
|bar | +-----------+
+----------+
我想在单个列表对象的jsp中显示这两个表中的字段,我决定使用@SecondaryTable
。这两个表由featureId
字段(secondTable
的主键)连接,我希望featureName
中的secondTable
与来自的字段一起显示firstTable
。 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
是我使用FirstTablePojo
之前@SecondaryTable
中的属性,并且${feature.featureName}
,我看到每个foo
,但featureNames
都没有出现。如果有人能告诉我这里错过了什么以及为什么其他表中的功能名称没有出现在FirstTablePojo
对象列表中,那就太棒了。
答案 0 :(得分:7)
@SecondaryTable
注释的要点是将单个实体的字段映射到多个表,就像将这些表合并为一个表一样。
@ManyToOne用于映射两个实体之间的多对一关联。但你只有一个。在这种情况下没有任何意义。 @JoinColumn用于表示字段映射到构成... join列的列,即另一个表的外键。所以它也没有意义。
只需使用以下映射:
@Column(name="featureName", table="secondTable")
String featureName;
中通过示例对此进行了详细解释
答案 1 :(得分:0)
如果要将表示另一个实体的ID的外键字段放入辅助表中,则可以使用SharedPreferences sharedPreferences = getSharedPreferences("todo list", MODE_PRIVATE);
。在这种情况下,正确的方法是:
@JoinColumn