Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.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返回两个表之间的连接结果?_Java_Jpa - Fatal编程技术网

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;

}