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

Eri*_* B. 4 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;
}
Run Code Online (Sandbox Code Playgroud)

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

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

伪代码:

JPAQuery.insert(QAttachment.attachment).into(QContract.attachment).where(QContract.contract.id.eq(<contractId>));
Run Code Online (Sandbox Code Playgroud)

这样的事情可行吗?

Tim*_*per 6

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