Hibernate多对一映射具有不同的列数

时间:2015-07-17 13:35:57

标签: java database hibernate orm hibernate-mapping

您好我有2张桌子如下

表1:


    +-------------------+
    | ID  LOB col1 col2 |
    +-------------------+

主键(ID和LOB)

表2:


    +-----------------+
    | SK ID col3 col4 |
    +-----------------+

主键(SK)

需要提供从表2到table1的多对一关系 ,因为 table1 具有 compositePrimaryKey(ID和LOB) ) table2 没有任何与LOB相关的列。我无法提供映射。 请帮忙。

编辑我试过Table2的hibernate映射:

<many-to-one name="class1Obj" class="com.acs.enterprise.common.Class1" 
            lazy="proxy" insert="false" update="false">
    <column name="ID" />
    <column name="LOB" />
</many-to-one>

以上不起作用。在获取记录时,它尝试从table2获取LOB代码,这在Table1中根本不存在

3 个答案:

答案 0 :(得分:2)

假设<head> <link rel="stylesheet" href="style.css"> </head> <body ng-init="items=[3,1,2,3];"> <h1>Hello Plunker!</h1> <div > </div> <input type="text" ng-model="nm" /> <div ng-repeat="item in items track by $index | filter:nm" ng-hide="hide"> {{item}} </div> <button ng-click="hide=!hide">Toggle </button> <button ng-click="items[items.length]=items.length">Add</button> <script src="https://code.angularjs.org/1.4.2/angular.min.js"></script> <script src="script.js"></script> </body> </html> table2.SK的FK并且没有table1.ID条目具有相同的ID,您可以按如下方式编写映射:

table1

如果有更多@ManyToOne @JoinColumn(name = "ID", insertable = false, updatable = false) private Class1 class1Obj; 行具有相同的ID,则映射将失败,因为Child将与多个Parent匹配。

因此,对于正确的table1关联,您需要FK到父列,这是唯一的。

答案 1 :(得分:0)

Hibernate @Id不必与真实数据库主键相对应(当然,它们最好匹配)。

如果IDTable1中的唯一列,则只将Hibernate ID映射到它,并将LOB保留为普通字段。

如果ID不是唯一列,那么无论如何你的多对一都无法正常工作,因为引用的表中会有多个匹配的行。

答案 2 :(得分:0)

@Entity
@Table(name="Table_name")
public class table_name {
@EmbeddedId
@AttributeOverrides({
@AttributeOverride(name = "id1", column = @Column(name = "col1")),
@AttributeOverride(name = "id2", column = @Column(name = "col2")) })
相关问题