public class A{
private A.id id;
private String bar;
public static class Id{
private String a;
private String b;
//重写eqauls和hashcode方法
//getter,setter
}
//getter,setter
}
映射文件:
<hibernate-mapping package="org.xx.yyy.zzzz">
<!--
Depends on Hibernate configuration with hibernate.hbm2ddl.auto=update.
-->
<class name="A" table="TA">
<composite-id name="id" class="XmlSchemaGrant$Id">
<key-property name="a" type="string">
<column name="a" />
</key-property>
<key-property name="b" type="string">
<column name="b" />
</key-property>
</composite-id>
<property name="bar" column="bar" type="text"
not-null="false" />
</class>
注意Java类中,Id类必须是静态类,否则会报No default constructor for entity的错误。
注意配置文件中,配置联合主键的class中间要用$符号。
关于静态内部类,其相当于写在Java文件中的普通类。可参考以下文字:
http://java.sun.com/docs/books/jls/third_edition/html/classes.html#8.1.3
https://forum.hibernate.org/viewtopic.php?f=1&t=973414&view=previous
写道
Check out this section of the Java language spec that explains the difference between static and non-static inner classes:
http://java.sun.com/docs/books/jls/third_edition/html/classes.html#8.1.3
A static inner class is conceptually no different than a regular general class declared in a .java file.
http://java.sun.com/docs/books/jls/third_edition/html/classes.html#8.1.3
A static inner class is conceptually no different than a regular general class declared in a .java file.