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>;