六狼论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博账号登陆

只需一步,快速开始

搜索
查看: 94|回复: 0

Hibernate对无主键表的操作

[复制链接]

升级  45%

95

主题

95

主题

95

主题

举人

Rank: 3Rank: 3

积分
335
 楼主| 发表于 2013-1-13 18:59:20 | 显示全部楼层 |阅读模式
Db2 表:Test 只有一个测试字段:name character(10)
Hibernate的hbm文件:Test.hbm.xml
<xml version="1.0"?>   <hibernate-mapping>    <class name="Test" table="test">     <composite-id name="testpk" class="Testpk" unsaved-value="any">       <key-property name="name" column="name" type="string"/>         composite-id>      <class>   hibernate-mapping>    Test.java
import java.io.Serializable;public class Test implements Serializable{ private Testpk testpk;  public void setTestpk(Testpk value){  this.testpk=value; }  public Testpk getTestpk(){  return this.testpk; } }Testpk.javaimport java.io.Serializable; public class Testpk implements Serializable{  private String name; public String getName() {  return this.name; }  public void setName(String value){  this.name=value; }  public boolean equals(Object other) {       Testpk that = (Testpk) other;            return this.name.equals(that.name);       }           /**     * Returns the hash code for the key.     */        public int hashCode() {            return (this.name.hashCode());            } } 
测试代码:
Test t=new Test();  Testpk tpk=new Testpk();  tpk.setName("test000000");  t.setTestpk(tpk);  session.save(t); 
最后值得注意的是当要load的时候,不能简单的Test t=(Test)session.load(Test.class,"test000000"); 而使用一个Testpk作为一个实体类的标识符。
所以应该这么写:
Testpk tpk=new Testpk(); tpk.setName("test000000"); Test t=(Test)session.load(Test.class,tpk); 
您需要登录后才可以回帖 登录 | 立即注册 新浪微博账号登陆

本版积分规则

快速回复 返回顶部 返回列表