我知道,@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
对象列表中,那将是非常不错的。 最佳答案
@SecondaryTable
批注的重点是将单个实体的字段映射到多个表,就像将那些表合并到一个表中一样。
@ManyToOne用于映射两个实体之间的多对一关联。但是你只有一个。在这种情况下,这没有任何意义。 @JoinColumn用于指示字段映射到构成...连接列的列,即另一个表的外键。因此也没有任何意义。
只需使用以下映射:
@Column(name="featureName", table="secondTable")
String featureName;
用Hibernate documentation很好地解释了这一点。