您好我有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中根本不存在
答案 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
不必与真实数据库主键相对应(当然,它们最好匹配)。
如果ID
是Table1
中的唯一列,则只将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")) })