我正在获取Hibernate @EmbeddedId的问题。我的@EmbeddedId的代码是:
@Embeddable
public class EnrolRegEmbededId implements Serializable
{
@Column(name="ENROL_NO")
private String enrolNo;
@Column(name="REG_NO")
private String regNo;
}
我的实体类是:
@Entity
@Table(name = "PTAX_ENROL_REG_PRINCIPAL_INFO")
public class Enrol_reg_principal_info implements Serializable {
@EmbeddedId
private EnrolRegEmbededId enrolReg;
@Column(name = "APPLN_TYPE")
private String type;
@Column(name = "FIRST_NM")
private String f_name;
@Column(name = "MIDDLE_NM")
private String m_name;
@Column(name = "LAST_NM")
}
问题是:当enrolNo和regNo都具有值时,我从'Enrol_reg_principal_info'类获取数据。但是当enrolNo或regNo具有值时,将获得NUllPointerException。
hql为: 字符串hql =“来自Enrol_reg_principal_info prin,其中prin.enrolReg.regNo =:id”; 获得regNo的价值。
字符串hql =“来自Enrol_reg_principal_info prin,其中prin.enrolReg.enrolNo =:ec”; 获得enrolNO的价值。
方法是:
public EnrolRegPrinModel masterDetailsEC(String EC) throws Exception {
EnrolRegPrinModel ecDetails = new EnrolRegPrinModel();
Enrol_reg_principal_info info = new Enrol_reg_principal_info();
Session s = null;
try {
s = sessionFactory.openSession();
String hql = " from Enrol_reg_principal_info prin where
prin.enrolReg.enrolNo=:ec";
Query q = s.createQuery(hql);
q.setString("ec", EC);
info = (Enrol_reg_principal_info) q.uniqueResult();
} catch (Exception ex) {
ex.printStackTrace();
} finally {
s.close();
}
return ecDetails;
}
请帮助。预先感谢
答案 0 :(得分:3)
当您说EmbeddedId
时,它表示一个复合主键,它期望一个非空且唯一的值。 JPA希望这些列为非空且唯一。根据此选择列。
此外,我不确定您是否已经有吸气剂和吸气剂。嵌入式id类需要正确设置equals()
和hashcode()
方法。
答案 1 :(得分:1)
我认为问题在于您正在尝试通过uniqueResult
方法获取结果。由于它是一个复合主键,因此对于您发送的ec,数据库中可能有多个记录,并且存在一条经验法则,uniqueResult
仅应获取一个结果(即使没有记录也是如此)。找到了,那么您也将面临异常)。
尝试以以下方式获取结果:
List<Enrol_reg_principal_info> info = (List<Enrol_reg_principal_info>) q.list();