2016-04-24 29 views
1

我想第一次在JPA上工作,善意地混淆我如何获取父值。如何获取父值

这里是我的表结构

T1(
    id (pk), 
    name (varchar) 
) 

T2(
    id (pk), 
    t1_id (fk_t1), 
    number (int) 
) 

T3 (
    id (pk), 
    t2_id (fk_t2), 
    time (datetime) 
    zone (tinyint), 
    name (varchar) 
) 

如果我在SQL工作,我可以用这个查询

select * from T3, T2, T1 
where T3.time = <given_time>, 
and T3.name = <given_name>, 
and T3.t2_id = T2.id, 
and T2.t1_id = T1.id 

现在,我怎么能这样转移到JPA。我可以使用命名查询,这不是问题。但我应该如何构造这个对象。

到目前为止,我有这个

@Entity 
@Table(name="T3, schema="", catalog="dbname") 
public class T3Entity{ 
    private int id; 
    private DateTime datetime; 
    private int zone; 
    private String name; 

    @Id 
    @Column(name="id", nullable=false, insertable=true, updatable=true) 
    //GETTER/SETTERS 

    @Basic 
    @Column(name="datetime", nullable=false, insertable=true, updatable=true) 
    //GETTER/SETTERS 

    @Basic 
    @Column(name="zone", nullable=false, insertable=true, updatable=true) 
    //GETTER/SETTERS 

    @Basic 
    @Column(name="name", nullable=false, insertable=true, updatable=true) 
    //GETTER/SETTERS 

} 

现在在这里,我很困惑。我应该创建另一个字段T2(每个孩子的父字段),然后注释?如何注释?自定义查询会自动设置这些对象的值吗?

回答

0

您还需要表T1和T2的实体类,例如T1Entity和T2Entity。

在T3Entity添加型T2Entity成员,并与@ManyToOne注释:

public class T3Entity { 
    ...old fields... 

    @ManyToOne(fetch=FetchType.LAZY) 
    @JoinColumn(name="t2_id") 
    private T2Entity t2; 

    // getter, setter 
} 

开始here阅读关于这个注解。

+0

我会如何编写查询?鉴于我在'T3Entity'中有'T2Entity',我不能使用'T3Entity.id = T2Entity.id' ?????? –

+0

您使用JPA连接:'SELECT t1,t2,t3 FROM T1Entity t1 JOIN t1.t2 t2 JOIN t2.t3 t3 WHERE t3.time =:time and t3.name =:name',参见http://wiki.eclipse .ORG /的EclipseLink/UserGuide/JPA/Basic_JPA_Development /查询/ JPQL#FROM_Clause – wero