Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/351.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java JPA@SecondaryTable与未连接的关系_Java_Sql_Hibernate_Jpa - Fatal编程技术网

Java JPA@SecondaryTable与未连接的关系

Java JPA@SecondaryTable与未连接的关系,java,sql,hibernate,jpa,Java,Sql,Hibernate,Jpa,嗨,我在两个表和两个视图之间进行了设置。视图和表是一对一的,但我需要随时访问这两个视图和表,不幸的是,我无法更改我的数据库。这两个表具有多对一关系。所有表和视图都具有相同的主键名称,因此表和视图之间的连接很容易 SELECT ... FROM TABLE_2 t, VIEW_2 v WHERE t.ID = v.ID AND t.MODEL_1_ID = <m1Key>; 我有以下代码 //Model1.java The One @Entity @T

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

    SELECT ... FROM TABLE_2 t, VIEW_2 v WHERE t.ID = v.ID AND t.MODEL_1_ID = <m1Key>;
我有以下代码

    //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;
       }
    }
    SELECT ... FROM TABLE_2 t, VIEW_2 v WHERE t.ID = v.ID AND t.MODEL_1_ID = <m1Key>;
//Model1.java
@实体
@表(name=“表1”)
@第二个表(name=“VIEW_1”)
公共类模型1{
@身份证
@生成值
@列(name=“ID”)
私人长id;
公共长getId(){
返回此.id;
} 
@OneToMany(mappedBy=“m1”)
私人名单m2s;
公共列表getM2s(){
返回此.m2s;
}
}
//Model2.java的许多
@实体
@表(name=“表2”)
@第二个表(name=“VIEW_2”)
公共类模型2{
@身份证
@生成值
@列(name=“ID”)
私人长id;
公共长getId(){
返回此.id;
} 
@许多酮
@JoinColumn(name=“MODEL\u 1\u ID”)
私有模式1 m1;
公共无效集合m1(模型1 m1){
这是m1=m1;
}
公共模型1 getM1(){
返回这个.m1;
}
}
然后我就这样用

    Model1 m = Service.read(m1Key);
    List<Model2> m2s = m.getM2s();
    SELECT ... FROM TABLE_2 t, VIEW_2 v WHERE t.ID = v.ID AND t.MODEL_1_ID = <m1Key>;
Model1 m=Service.read(m1Key);
List m2s=m.getM2s();
但是HibernateJPA创建的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>;
选择。。。从表_2t中,查看_2v,其中t.ID=;
而不是

    SELECT ... FROM TABLE_2 t, VIEW_2 v WHERE t.ID = v.ID AND t.MODEL_1_ID = <m1Key>;
选择。。。从表_2t中,查看_2v,其中t.ID=v.ID和t.MODEL_1_ID=;

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

为什么您需要加入其中?看起来您只是在连接ID,Hibernate已经知道了。@chrylis是的Hibernate知道ID,但是第一个查询返回3710行,第二个查询返回7(正确值)b/c,没有连接,查询的是两个表的完整乘积,而不是它们的连接。您需要发布整个类,特别是包括ID字段。@chrylis更新了帖子,这只是我试图做的事情的一个例子,但我基本上已经注释/更改了我实际运行的代码,使其如此简单,以便在添加所有其他字段/关系之前解决问题,一次解决一个问题。哈哈,你为什么需要在那里加入?看起来您只是在连接ID,Hibernate已经知道了。@chrylis是的Hibernate知道ID,但是第一个查询返回3710行,第二个查询返回7(正确值)b/c,没有连接,查询的是两个表的完整乘积,而不是它们的连接。您需要发布整个类,特别是包括ID字段。@chrylis更新了帖子,这只是我试图做的事情的一个例子,但我基本上评论/更改了我实际运行的代码,使其如此简单,以便在添加所有其他字段/关系之前解决问题,一次一个问题哈哈
    SELECT ... FROM TABLE_2 t, VIEW_2 v WHERE t.ID = v.ID AND t.MODEL_1_ID = <m1Key>;