查找Hibernate实体的主键字段

Shy*_*yam 4 hibernate primary-key

我们是否有可能以编程方式找到Hibernate实体的主键字段(类似于JPA PersistenceUnitUtil)?

Ken*_*han 8

SessionFactory提供了一个名为getClassMetadata()的方法来获取类的元数据对象(即ClassMetadata)

要获取实体的标识符属性的名称,请使用ClassMetadata.getIdentifierPropertyName()

ClassMetadata employeeMeta =  sessionFactory.getClassMetadata(Employee.class);
System.out.println("Name of the identifier property of the employee entity :" + employeeMeta .getIdentifierPropertyName());
Run Code Online (Sandbox Code Playgroud)

要获取托管实体实例的标识符属性的值,请使用ClassMetadata.getIdentifier(Object entity,SessionImplementor session)

例如:假设您有一个从会话加载的托管实体实例:

List<Employee> employeeList = (List<Employee>)session.createQuery("from Employee where gender ='F'").list();
ClassMetadata employeeMeta = session.getSessionFactory().getClassMetadata(Employee.class);
for (Employee employee : employeeList ) {
    System.out.println("Value of the Primary key:" + employeeMeta.getIdentifier(employee , session) );
}
Run Code Online (Sandbox Code Playgroud)