我可以使用QueryDSL直接插入JPA实体吗?

时间:2014-06-18 17:11:11

标签: hibernate jpa querydsl

在QueryDSL中是否有一种方法可以直接插入JPA实体而不直接使用JPA提供程序?

我的用例问题如下。我正在使用Hibernate与两个实体之间的连接表映射。

例如:

public class Contract implements Serializable {

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    @Column(name = "id")
    private Long id;

    @Version
    @Column(name = "version")
    private Integer version;

    private String number;
    private String volume;

    @ManyToMany
    @JoinTable(joinColumns = @JoinColumn(name = "contract_id", referencedColumnName = "id"), inverseJoinColumns = @JoinColumn(name = "attachment_id", referencedColumnName = "id"))
    private List<Attachment> attachments;
}

我的问题是,如果我尝试同时在2个单独的线程中添加附件,我将获得乐观的锁定异常(如预期的那样)。因此,我想尝试通过SQL插入命令直接添加附件。

是否有通过QueryDSL作为对象插入Attachment实体?我找不到任何涵盖此用例的参考文档。只有更新查询,需要设置各个字段。

伪代码:

JPAQuery.insert(QAttachment.attachment).into(QContract.attachment).where(QContract.contract.id.eq(<contractId>));

这样的事情是否可行?

1 个答案:

答案 0 :(得分:6)

Querydsl没有涵盖这一点,JPA API也没有涵盖INSERT子句,因此您需要通过JPA EntityManager API进行插入。