JPA插入x中,从y中选择*(HQL)

时间:2018-07-24 16:14:30

标签: java hibernate hql pojo

我对JPA的了解不到一周,如果这是一个愚蠢的问题,请多多包涵。

我有两个具有相同模式的表X和Y

我使用XHome类的findById方法,如果结果通过了一些检查,则将其添加到int List xList中。 现在,如果X表有100行,则xList最终将拥有近10条记录。

现在,我想将此xList的元素存储到Y表中。 所以我想遍历列表,并使用YHome类的persist方法将元素插入到Y表中。

现在X和Y是不同表的不同DTO(bean)。 因此它不允许我插入X对象,因为它期望Y。

当然,由于没有父子关系,我当然不能使用强制转换。 在HQL中有可行的方法吗? 除非对于每条记录,否则在调用persist()之前,必须使用X的getter并将其设置为使用Y的setter。

有没有现成的解决方案?

1 个答案:

答案 0 :(得分:0)

我会以此为起点:

@Entity
@Inheritance(strategy=InheritanceType.TABLE_PER_CLASS)
public class Entity1 {
    @Id private int id;


@Entity
public class Entity2 extends Entity1 {

并使用它:

tx.begin();
Entity1 entity1 = new Entity1();
entity1.setId(1);
em.persist(entity1);
entity1 = new Entity1();
entity1.setId(2);
em.persist(entity1);
tx.commit();
em.clear();

tx.begin();
Query q = em.createQuery("insert into Entity2(id) select e.id from Entity1 e");
int res = q.executeUpdate();
System.out.println("Count = " + res);
tx.commit();
em.close();