【问题标题】:How to fetch parent values如何获取父值
【发布时间】:2016-08-17 15:09:16
【问题描述】:

我第一次尝试在 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 的字段(每个孩子的父字段)然后注释吗?如何注释?自定义查询会自动设置这些对象的值吗?

【问题讨论】:

    标签: java mysql database jpa persistence


    【解决方案1】:

    您还需要表 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 阅读有关此注释的信息。

    【讨论】:

    • 我将如何编写查询?鉴于我在T3Entity 中有T2Entity 我不能使用T3Entity.id = T2Entity.id ??????
    • 你使用 JPA 连接:SELECT t1,t2,t3 FROM T1Entity t1 JOIN t1.t2 t2 JOIN t2.t3 t3 WHERE t3.time = :time and t3.name = :name,见wiki.eclipse.org/EclipseLink/UserGuide/JPA/…
    猜你喜欢
    • 1970-01-01
    • 2013-07-25
    • 2014-11-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-31
    • 2015-06-04
    相关资源
    最近更新 更多