我知道,@SecondaryTable问题已经发布了无数次,因此,如果有相同的问题(我还没有找到),请给我链接或建议。
@SecondaryTable
我的数据库(firstTable和secondTable)中有两个表,两个POJO Hibernate类(FirstTablePojo和SecondTablePojo)。
firstTable
secondTable
FirstTablePojo
SecondTablePojo
+----------+ +-----------+ |firstTable| |secondTable| |----------+ |-----------+ |featureId |------------>|featureId |(secondTable's primary key) |foo | |featureName| |bar | +-----------+ +----------+
我想在单个列表对象的jsp中显示这两个表中的字段,因此我决定使用@SecondaryTable。这两个表由featureId字段(这是的主键secondTable)连接在一起,我希望featureNamefrom中的from secondTable与from中的字段一起显示firstTable。在FirstTablePojo由该注释之前:
featureId
featureName
@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对象列表中,那将是很棒的。
<c:forEach items="${features}" var="feature">
${feature.foo}
foo
${feature.featureName}
featureNames
该点@SecondaryTable注释是单个实体的字段映射到多张表,就好像这些表合并为一个单一的一个。
@ManyToOne用于映射两个实体之间的多对一关联。但是你只有一个。在这种情况下,这没有任何意义。@JoinColumn用于指示将字段映射到构成…连接列的列,即另一个表的外键。因此也没有任何意义。
只需使用以下映射:
@Column(name="featureName", table="secondTable") String featureName;
Hibernate文档中有一个示例对此进行了很好的解释。