id(PK_key/FK) | username(U) |
1 | aaa |
2 | bbb |
id(PK_key) | u_id(U) | FileName |
1 | 1 | test.jpg |
2 | 1 | abc.jpg |
以上的数据是合理的,而且无违反任何约束。
然而数据如果是这样:
id(PK_key/FK) | username(U) |
1 | aaa |
2 | bbb |
id(PK_key) | u_id(U) | FileName |
1 | 1 | test.jpg |
2 | 2 | test.jpg |
<composite-id name="propertyName"(1) class="ClassName"(2) unsaved-value="any|none"(3) access="field|property|nosetter|ClassName"> <key-property name="propertyName" type="typename" column="column_name"/> <key-many-to-one name="propertyName class="ClassName" column="column_name"/> ...... </composite-id>
如果表使用联合主键,你可以把类的多个属性组合成为标识符属性。<composite-id>
元素接受<key-property>
属性映射和<key-many-to-one>
属性映射作为子元素。
<composite-id> <key-property name="medicareNumber"/> <key-property name="dependent"/> </composite-id>
你的持久化类必须重载Equals()
和HashCode()
方法,来实现组合的标识符判断等价.也必须实现Serializable
接口
不幸的是,这种组合关键字的方法意味着一个持久化类是它自己的标识。除了对象自己之外,没有什么方便的“把手”可用。你必须自己初始化持久化类的实例,在使用组合关键字Load()
持久化状态之前,必须填充他的联合属性。我们会在TODO:LINKTOCOMPENENTS中说明一种更加方便的方法,把联合标识实现为一个独立的类,下面描述的属性只对这种备用方法有效:
(1) |
|
(2) |
|
(3) |
|