как найти идентификатор внешнего ключа в спящем режиме - PullRequest
0 голосов
/ 10 октября 2019

У меня есть две сущности, а именно:

Состояние

@Entity
@Table(name = "State")
public class StateEntity {

   @Column(name = "id", length = 36, nullable = false, unique = true)
   private String id;

  @ManyToOne (fetch = FetchType.LAZY)
  @JoinColumn(name = "InsurerId", nullable = false)
  private InsurerEntity insurer;

  @Column(name ="StateName", length = 50, nullable = false)
  private String stateName;

//getters and setters

}

Страховщик

@Entity
@Table(name = "Insurer")
public class InsurerEntity {

  @Column(name = "InsurerId", length = 36, nullable = false, unique = true)
  private String insurerId;

  @Column(name = "InsurerName", length = 100, nullable = true)
  private String insurerName;

  @OneToMany(mappedBy = "state", fetch = FetchType.LAZY)
  private List<StateEntity> stateEntityList;

//getters and setters

}

идентификатор страховщика сохраняется в базе данных state иЯ хочу получить его с помощью запроса гибернации, но не могу найти решение для этого

Как записать этот запрос SELECT InsurerId FROM State; в запросе гибернации, используя CriteriaBuilder, CriteriaQuery и Root. .

Ответы [ 2 ]

1 голос
/ 10 октября 2019

Если вы хотите выбрать все идентификаторы страховщиков для всех состояний:

String selectionQuery = "SELECT s.insurer.insurerId FROM State s";
List<String> insurersIds = session.createQuery(selectionQuery).list();

Если вы хотите выбрать идентификаторы страховщиков определенного состояния:

String selectionQuery = "SELECT s.insurer.insurerId FROM State s WHERE s.id = :stateId";
String insurerId = (String) session.createQuery(selectionQuery).setParameter("stateId", stateId).getSingleResult(); //This should be placed in a try/catch block to handle org.hibernate.NonUniqueResultException

Редактировать:

Вы должны обновить свою сущность Страховщика, как писал Прасад в своем ответе.

0 голосов
/ 10 октября 2019

для этого вы должны отобразить оба класса, как в аннотации put @oneToMany, а также класс InsurerEntity

@OneToMany(fetch = FetchType.LAZY,mappedBy="StateEntity", cascade = CascadeType.ALL)

private List< StateEntity > StateEntitys;

и когда выfetch сообщает, что вы также получите объект InsurerEntity, откуда вы можете получить к нему доступ с помощью getter

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...