使用hibernate加入2个表的最佳方法

Dav*_*ave 10 hibernate

我有2个休眠实体/表,需要组合两者的信息才能在视图中使用.表是

Table Client:
  clientId,
  firstName,
  lastName,
  phone,
  cellPhone

Table Appointment:
  apptTime,
  clientId (and some other fields I don't need now)
Run Code Online (Sandbox Code Playgroud)

客户端和约会之间存在一对多的关系,基于clientID.在常规SQL中我只会说:

Select 
    client.clientId, 
    appt.apptTime,
    client.firstName,
    client.lastName 
from 
    Client  client, 
    Appointment app 
where 
    client.clientId = appt.clientId
Run Code Online (Sandbox Code Playgroud)

并使用返回的记录集.

我不知道如何在Hibernate中执行此操作.我应该创建一个ClientAppt实体,然后执行类似上面的选择(在某种程度上针对HQL进行修改)吗?

注意,我想过使用SecondaryTable方法,但我认为这需要一对一的关系?我想我可以将一个映射到多个,但还有其他选择吗?这是一次性更改并且映射一对多的关系对于这么小的东西可能有点贵?什么是最好的方法?谢谢

sha*_*kan 4

您可以通过多种方式对此进行建模。我要做的就是让客户成为一个实体,并让各种约会成为一个元素集合。你没有指定语言,但在 Java 中它会是这样的:

@Entity
@Table(name="person")
public class ClientAppts {
    ...

    @OneToMany(mappedBy="client")
    Set<Appointment> appointments;
}

@Entity
@Table(name="person")
public class Appointment {
    ....

    @ManyToOne
    @JoinColumn(name="person_id")
    private ClientAppts client;

    ....
}     
Run Code Online (Sandbox Code Playgroud)

然后,您可以使用您喜欢的任何方法来获取客户端,最简单的是:

    session.get(Client.class, clientId);
Run Code Online (Sandbox Code Playgroud)

Hibernate 将执行连接并返回带有一组约会的 Client 对象。您可以进一步将集合设为 SortedSet,或者向其添加索引以使其成为 List。