Если любое значение поля @EmbeddedId равно нулю, какая проблема возникнет? - PullRequest
0 голосов
/ 31 августа 2018

Я получаю проблему с 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")
}

Проблема в том, что я получаю данные из класса 'Enrol_reg_principal_info', когда оба значения enrolNo и regNo имеют значение. Но получите NUllPointerException, когда enrolNo или regNo имеют значение.

hql это: String hql = "из Enrol_reg_principal_info prin, где prin.enrolReg.regNo =: id"; для получения значения для regNo.

String 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;
}

Пожалуйста, помогите. Заранее спасибо

Ответы [ 2 ]

0 голосов
/ 31 августа 2018

Я думаю, проблема в том, что вы пытаетесь получить результаты с помощью метода uniqueResult. Поскольку это составной первичный ключ, существует вероятность того, что для отправленного вами ec есть несколько записей, доступных в базе данных, и есть правило большого пальца с uniqueResult, что вы должны получить только один результат (даже если запись не найдена, также вы столкнетесь с исключением).

Попробуйте получить результаты как:

List<Enrol_reg_principal_info> info = (List<Enrol_reg_principal_info>) q.list();
0 голосов
/ 31 августа 2018

Когда вы говорите EmbeddedId, он представляет собой составной первичный ключ, который ожидает ненулевое и уникальное значение. JPA ожидает, что эти столбцы будут ненулевыми и уникальными. Выберите ваши столбцы в соответствии с этим.

Hibernate ссылка: http://docs.jboss.org/hibernate/orm/5.3/userguide/html_single/Hibernate_User_Guide.html#identifiers-composite-aggregated

Кроме того, я не уверен, что у вас уже есть геттеры и сеттеры. Во встроенном классе id должны быть правильно установлены методы equals() и hashcode().

...