Java 如何使用JPA返回两个表之间的连接结果?
我有两个表Java 如何使用JPA返回两个表之间的连接结果?,java,jpa,Java,Jpa,我有两个表sdr和operator 特别提款权: 接线员: id name avaya_id description 0 smitt 1234 text 1 bill 5678 text 我需要选择此表并将结果插入另一个表-calls CAL: 我需要选择两个表sdr和operator,并将结果插入cals表中 我使用JPA,我不知道怎么做。我有一个想法,创建另一个类,如sdromoperator,并编写: private List<SdrOperato
sdr
和operator
特别提款权:
接线员:
id name avaya_id description
0 smitt 1234 text
1 bill 5678 text
我需要选择此表并将结果插入另一个表-calls
CAL:
我需要选择两个表sdr
和operator
,并将结果插入cals
表中
我使用JPA,我不知道怎么做。我有一个想法,创建另一个类,如sdromoperator
,并编写:
private List<SdrOperator> getAllModelsIterable(int offset, int max) {
List<SdrOperator> resultList = null;
try {
resultList = em.createQuery(" SELECT m.id, m.duration, m.dialednum, m.description, o.id from Cdr m, Operators o WHERE m.codedial = o.avaya_id", SdrOperator.class).setFirstResult(offset).setMaxResults(max).getResultList();
} catch (Exception e) {
this.logger.log(Level.SEVERE, null, e);
}
return resultList;
}
私有列表getAllModelsIterable(int偏移量,int最大值){
列表结果列表=null;
试一试{
resultList=em.createQuery(“从Cdr m中选择m.id、m.duration、m.dialednum、m.description、o.id,其中的运算符o m.codedial=o.avaya_id”,sdromoperator.class)。setFirstResult(偏移量)。setMaxResults(最大值)。getResultList();
}捕获(例外e){
this.logger.log(Level.SEVERE,null,e);
}
返回结果列表;
}
然后从sdromoperator.class
创建Cals类
,或者有另一种解决方案?有两种方法
1) 使用@JoinTable策略。在这种情况下,您不需要创建关联类(例如SDR操作符)。见样本
@Entity
public class Sdr{
@Id
@Column(name="ID")
private long id;
@ManyToMany
@JoinTable(name="cals",
joinColumns={@JoinColumn(name="duration", referencedColumnName="duration")},
inverseJoinColumns={@JoinColumn(name="operator_id", referencedColumnName="id")})
private List<Operator> operators;
}
@实体
公共类特别提款权{
@身份证
@列(name=“ID”)
私人长id;
@许多
@JoinTable(name=“cals”,
joinColumns={@JoinColumn(name=“duration”,referencedColumnName=“duration”)},
inverseJoinColumns={@JoinColumn(name=“operator\u id”,referencedColumnName=“id”)}
私人名单运营商;
}
2) 如您所述,创建一个关联类,并与Sdr和运算符类联接。检查一个例子和解释 我是一个懒惰的家伙,所以我会创建一个视图,然后使用Eclipse根据该视图生成一个实体(我有点不理解你)
private List<SdrOperator> getAllModelsIterable(int offset, int max) {
List<SdrOperator> resultList = null;
try {
resultList = em.createQuery(" SELECT m.id, m.duration, m.dialednum, m.description, o.id from Cdr m, Operators o WHERE m.codedial = o.avaya_id", SdrOperator.class).setFirstResult(offset).setMaxResults(max).getResultList();
} catch (Exception e) {
this.logger.log(Level.SEVERE, null, e);
}
return resultList;
}
@Entity
public class Sdr{
@Id
@Column(name="ID")
private long id;
@ManyToMany
@JoinTable(name="cals",
joinColumns={@JoinColumn(name="duration", referencedColumnName="duration")},
inverseJoinColumns={@JoinColumn(name="operator_id", referencedColumnName="id")})
private List<Operator> operators;
}