JPA @SecondaryTable,关系未加入

时间:2015-10-30 00:40:38

标签: java sql hibernate jpa

嗨所以我在两个表和两个视图之间进行了此设置。视图和表是彼此一对一的,但我需要始终访问这两者,遗憾的是无法更改我的数据库。这两个表具有多对一关系。所有表和视图都具有相同的主键名称,因此表和视图之间的连接很容易。

我有以下代码

    //Model1.java The One
    @Entity
    @Table(name = "TABLE_1")
    @SecondaryTable(name = "VIEW_1")
    public class Model1 {

       @Id
       @GeneratedValue
       @Column(name = "ID")
       private Long id;

       public Long getId() {
          return this.id;
       } 

       @OneToMany(mappedBy = "m1")
       private List<Model2> m2s;

       public List<Model2> getM2s() {
          return this.m2s;
       }
    }

    //Model2.java The Many
    @Entity
    @Table(name = "TABLE_2")
    @SecondaryTable(name = "VIEW_2")
    public class Model2 {

       @Id
       @GeneratedValue
       @Column(name = "ID")
       private long id;

       public Long getId() {
          return this.id;
       } 

       @ManyToOne
       @JoinColumn(name = "MODEL_1_ID")
       private Model1 m1;

       public void setM1 (Model1 m1) {
          this.m1 = m1;
       }
       public Model1 getM1 () {
          return this.m1;
       }
    }

然后我像这样使用它

    Model1 m = Service.read(m1Key);
    List<Model2> m2s = m.getM2s();

但是Hibernate JPA创建的sql是

    SELECT ... FROM TABLE_2 t, VIEW_2 v WHERE t.ID = <m1Key>;

而不是

    SELECT ... FROM TABLE_2 t, VIEW_2 v WHERE t.ID = v.ID AND t.MODEL_1_ID = <m1Key>;

因此,当我获得许多列表时,我的主表和辅助表之间的连接基本上没有发生。如果有注释或任何设置,您可以建议它将是一个巨大的帮助。

0 个答案:

没有答案