java - JPQL 更新查询

标签 java sql hibernate jpa jpql

我有一个这样的实体:

@Entity
@Table(name = "QUESTION_GROUP_TEXT")
@NamedQueries({
        @NamedQuery(
                name = EntityUtils.NamedQuery.UPDATE_QUESTION_GROUP_TEXT,
                query = "UPDATE QuestionGroupText T SET T.localizedText.content = :content WHERE T.generatedId = :generatedId")
})
public class QuestionGroupText implements Serializable {

    @Column(name = "GENERATED_ID", nullable = false, unique = true)
    private String generatedId = generateId();

    @ManyToOne(fetch = FetchType.EAGER, cascade = CascadeType.ALL)
    @JoinColumn(name = "LOCALIZED_TEXT_ID", nullable = false)
    private LocalizedText localizedText;

    //Getters and setters

}

此查询:UPDATE QuestionGroupText T SET T.localizedText.content = :content WHERE T. generatedId = : generatedId 不起作用,它会抛出:

Caused by: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'set CONTENT='Question Label' where GENERATED_ID='AD78F9B5E2A146D9AB9D94096DA835B' at line 1

查询的这一部分一定有问题:T.localizedText.content,有什么方法可以更改它以使其正常工作吗?

最佳答案

我能够重写我需要的查询:

UPDATE LocalizedText L SET L.content = :content WHERE EXISTS (SELECT T FROM QuestionGroupText T WHERE T.localizedText.id = L.id AND T.generatedId = :generatedId)

关于java - JPQL 更新查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19443888/

相关文章:

c# - 在 ASP.NET 中从数据库动态创建 DIV

java - Weblogic 和 Oracle : Stuck ExecuteThread

java - 在 hibernate 查询返回的列表对象中迭代结果

java - 如何向 Micronaut 项目添加第二个数据源?

java - libgdx 表的 json 文件

java - 如何在第一次调用 Singleton 期间仅更新一次 map ?

java - Android 语音识别更改返回语言

java - Mockito:轮询等待验证

sql - 使用解码功能在Oracle中比较日期

php - 合并数组,将值相加