使用JPQL更新连接表

时间:2018-04-20 13:12:08

标签: jpa jpql

我试图使用JPQL更新已加入项目的值,但这对我没用。

我的实体Prof

@OneToMany (cascade = ALL)
    @JoinTable(name="jnt_Prof_Exam",
            joinColumns = @JoinColumn(name="idUser"), 
            inverseJoinColumns = @JoinColumn(name="idExam"))
    private List<Exam> exams;

我的更新代码

        EntityManagerFactory emf = Persistence.createEntityManagerFactory("QuizPU");
        EntityManager em = emf.createEntityManager();
        String req = "UPDATE Prof p SET p.exams = ?1 where p.idUser=?2";
        Query q = em.createQuery(req);
        q.setParameter(1, e);
        q.setParameter(2, idProf);
        q.executeUpdate();
        em.close();
        emf.close();

显示的例外是

An association field cannot be used in an update item's path expression.

1 个答案:

答案 0 :(得分:2)

嗯,问题正是消息所说的内容:您无法在p.exams查询中引用关联字段(在您的案例中为UPDATE)。

这是建立联系的一种相当复杂的方式。为什么不简单地按Prof查询idUser并设置p.exams的值? JPA将负责其余部分。