Java 如何在hibernate中查找外键id
我有两个实体,即: 陈述 保险人Java 如何在hibernate中查找外键id,java,mysql,spring,hibernate,foreign-keys,Java,Mysql,Spring,Hibernate,Foreign Keys,我有两个实体,即: 陈述 保险人 @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)
@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
}
@实体
@表(name=“承保人”)
公共类保险{
@列(name=“InsurerId”,长度=36,可空=false,唯一=true)
私人字符串保险ID;
@列(name=“InsurerName”,长度=100,可空=true)
私人字符串保险名称;
@OneToMany(mappedBy=“state”,fetch=FetchType.LAZY)
私有列表stateEntityList;
//接球手和接球手
}
保险人的id保存在状态数据库中,我想使用hibernate查询来检索它,但我似乎找不到解决方案
如何编写此查询
从状态选择InsurerId在Hibernate查询中使用CriteriaBuilder
、CriteriaQuery
和Root
。如果要为所有州选择所有保险公司的ID:
String selectionQuery = "SELECT s.insurer.insurerId FROM State s";
List<String> insurersIds = session.createQuery(selectionQuery).list();
编辑:
您应该更新您的保险公司实体,如Prasad在其回答中所述。为此,您必须将两个类别映射为类InsureEntity中的put@oneToMany注释
@OneToMany(fetch=FetchType.LAZY,mappedBy=“StateEntity”,cascade=CascadeType.ALL)
私有列表StateEntitys代码>
当您获取状态时,您还将在其中获取InsurerEntity对象,您可以使用getter访问它选择Insurance.insurerIdFROM State
@AlexanderTerekhov您是否可以使用CriteriaBuilder
、CriteriaQuery
和Root
执行相同的操作…请确保获取会话仍然打开,否则他将获得LazyInitializationException。您是否可以使用CriteriaBuilder
执行相同的操作,CriteriaQuery
和Root
。。。please@Cybertronian对不起,来晚了。你还对评论中的问题感兴趣吗?是的,我仍然感兴趣。
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