3

我有简单的休眠映射

      <class name="com.domain.OtherAccount" table="ACCOUNT">
          <composite-id >
            <key-property name="acctype" column="acctype" type="java.lang.Character"></key-property>
            <key-property name="accnum" column="accnum" type="java.lang.Integer"></key-property>
          </composite-id>
         <property name="accholder"></property>
      </class>

我不想为复合键创建单独的类。因此,acctype 和 accnum 只是 OtherAccount 类的一部分。类实现可序列化接口和 hashCode() 和 equals() 方法。

我能够创建新对象并使用 session.save() 将其持久化。但是如何检索现有对象?在 session.get() 方法中如何指定复合键?

  In session.get(OtherAccount.class, HOW TO SPECIFY COMPOSITE KEY HERE )
4

2 回答 2

8

创建一个实例OtherAccount并仅设置这两个字段。Hibernate 并不关心实例是否具有比它需要的更多的字段。

于 2012-11-14T08:38:05.453 回答
0

@Aaron 提出了正确的方法。有效。我只是在这里详细说明一下,以便将来用户完全了解。

关于上面的映射,假设我有一个带有复合键值 Accnum 的 ACCOUNT 表记录:- 777

账户类型:- X

非关键列 Accholder :- Kaushik

我以这种方式检索和打印对象:-

    OtherAccount oa1 = new OtherAccount();
    oa1.setAccholder("before retrieving");
    oa1.setAccnum(777);
    oa1.setAcctype('X');
    System.out.println("oa1.Accholder " + oa1.getAccholder());

    session.get(OtherAccount.class, oa1);

    System.out.println("oa1.Accholder " + oa1.getAccholder());

它检索到正确的记录,并且“oa1”实例加载了数据库数据。所以 oa1.getAccholder() 的第一个 SOP 打印“检索之前”,第二个 SOP 打印来自 DB 的“Kaushik”ig 值。

不要忘记实现 hashCode() 和 equals() 方法,因为它是比较复合键所必需的。

于 2012-11-14T09:33:39.040 回答