使用Hibernate 5.4从SQL查询中读取嵌套对象



Hibernate新手。我有以下设置:

@Entity
@Table(name = "primary_doctor")
public class PrimaryDoctor {
@Id
private Long rid;
@OneToOne
@JoinColumn(name = "pid")
private Patient patient;
@OneToOne
@JoinColumn(name = "did")
private Doctor doctor;
}
@Entity
@Embeddable
public class Doctor {
@Id
private Long did;
String name;
String phone;
}
@Entity
public class Patient {
@Id
private Long pid;
String name;
String gender;
String height;
String birthDate;
}

我想通过查询primary_doctor表来获得一个Doctor对象。我知道我可以在两个表的did上加入,但我觉得如果这样做,我就不用Hibernate对象映射了。你能指导我如何正确地做这件事吗。这是我所拥有的:

EntityManager entityManager = ...
entityManager.getTransaction().begin();
String sqlQuery = "SELECT * FROM DOCTOR WHERE DID = (SELECT DID FROM PRIMARY_DOCTOR WHERE pid = " + pid + ");";
Query q = entityManager.createNativeQuery(sqlQuery);
Object[] resultRow = (Object[]) q.getResultList().get(0);
String doctorName = (String) resultRow[1];

我还有一个persistence.xml文件,如下所示:

<persistence-unit name="test">
<class>model.Patient</class>
<class>model.Doctor</class>
<class>model.PrimaryDoctor</class>
...

我没有cfg文件。我需要那个吗?

我的Hibernate版本:

<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-core</artifactId>
<version>5.4.31.Final</version>
</dependency>

我正在使用H2作为数据库:

<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
<version>1.4.200</version>
</dependency>

以及在IntelliJ上使用Maven。

这是一个非常简单的JPQL/HQL查询,由于您是Hibernate的新手,我建议您从阅读一本书或遵循有关该主题的教程开始,而不是来到StackOverflow,因为我认为您将通过先阅读一些材料学到最多。在学习Hibernate时,你很可能会遇到更多的问题,其中大多数问题你可以通过先学习基础知识来轻松回答自己。这只是一个友好的建议,可以避免你因为等待答案而感到沮丧,所以做你认为合适的事情。无论如何,对您的用例的查询看起来是这样的:

Doctor d = entityManager.createQuery("select d from PrimaryDoctor p join p.doctor d where p.id = :id", Doctor.class)
.setParameter("id", primaryDoctorId)
.getSingleResult();

相关内容

  • 没有找到相关文章

最新更新