关于休眠:我可以直接使用QueryDSL插入JPA实体吗?

Can I insert a JPA entity directly using QueryDSL?

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

我的用例问题如下。 我将Hibernate与两个实体之间的联接表映射一起使用。

例如:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
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实体作为对象? 我找不到涵盖此用例的任何参考文档。 仅更新查询,这需要设置各个字段。

伪代码:

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

这样可行吗?


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