如何使用JPA返回两个表之间的连接结果?

时间:2015-12-09 06:21:01

标签: java jpa

我有2个表sdroperator

SDR:

id duration dialednum description
0   666      1234      text
1   777      5678      text
2   888      1234      text

运算符:

id name   avaya_id description
0  smitt    1234    text
1  bill     5678    text

我需要选择此表并将结果插入另一个表 - calls

CALS:

id duration operator_id
0   666      0
1   777      1
2   888      0

我需要选择两个表sdroperator并将结果(在对数据进行一些操作之后)插入cals表。

我使用JPA而我不明白该怎么做。我有一个想法是创建另一个类SdrOperator并写:

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

然后从Cals class创建SdrOperator.class或者还有其他解决方案吗?

1 个答案:

答案 0 :(得分:2)

有两种方式。

1)使用 @JoinTable 策略。在这种情况下,您不需要创建关联类(例如,SdrOperator)。见样本

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

}

2)创建一个关联类,如你所提到的那样喜欢SdrOperator并加入Sdr和Operator类。查看此link中的示例和说明。