好吧,我想知道我们是否总是需要在实体类中有一个 id 字段?我听说在你的实体类中总是有一个 id 字段是一种不好的做法,因为它绑定到数据库,即使你可能根本不需要数据库。
就我而言,我有这样的课程:
public class User {
private String firstName = "";
private String lastName = "";
private String personCode = "";
private Date birthDate = new Date();
private Gender gender = Gender.MALE;
private String email = "";
private String password = "";
private UserState userState = UserState.UNAPPROVED;
在我的例子中,我用他们的电子邮件地址来识别用户。这个类作为数据库中的表的等价物确实有一个额外的 userId 字段,它唯一地标识它。现在我在问我是否需要在这个 java 类中添加一个 idUser 字段?
我已经设法用 Hibernate 像这样映射它:
<class
name="User"
table="User"
discriminator-value="U" >
<!-- <id column="idUser" type="long" /> this one wouldn't even work... -->
<id name="email" />
<discriminator column="discriminator" type="string" />
<property name="firstName" />
<property name="lastName" />
<property name="personCode" />
<property name="birthDate" type="date"/>
<property name="userState" column="userState" length="15">
<type name="org.hibernate.type.EnumType">
<param name="enumClass">com.nortal.pirs.datamodel.enumeration.UserState</param>
<param name="type">12</param>
</type>
</property>
<property name="password" />
<property name="gender" column="gender" length="15">
<type name="org.hibernate.type.EnumType">
<param name="enumClass">com.nortal.pirs.datamodel.enumeration.Gender</param>
<param name="type">12</param>
</type>
</property>
<subclass name="Patient" extends="User" discriminator-value="P" >
<property name="additionalInfo" column="additionalInfo" />
</subclass>
<subclass name="SpiProfessional" extends="User" discriminator-value="S" />
</class>
现在扩展 User 的 Patient 和 SpiProfessional 有他们唯一的 id,这也是愚蠢的,这也只在数据库中可见。
到目前为止,我还没有设法通过休眠来保存 Patient 和 SpiProfessional。我收到此错误:
2012-11-14 07:36:44,265 [main] WARN org.hibernate.engine.jdbc.spi.SqlExceptionHelper - SQL Error: 1054, SQLState: 42S22
2012-11-14 07:36:44,266 [main] ERROR org.hibernate.engine.jdbc.spi.SqlExceptionHelper - Unknown column 'additionalInfo' in 'field list'
任何人都可以向我解释在 java 类中有 id 吗?还有人知道如何用hibernate解决这个问题吗?