java - JPA 更新与加入

标签 java jakarta-ee jpa

我有一个简单的 JPA 问题。假设我有以下类结构:

@Entity
@Table(name="foo_table")
class Foo{
    @Id @Column(name="ID")
    String id;
...
    @ManyToOne()
    @JoinColumn(name="BAR_ID")
    Bar bar;
}

@Entity
@Table(name="bar_table")
class Bar{
    @Id @Column(name="ID")
    String id;
    @Column(name="COL3")
    String col3;
}

场景:假设我想更新与“Foo”记录关联的“Bar”。

这是我迄今为止使用的查询:

EntityTransaction tx = em.getTransaction();
tx.begin();
int rowsUpdated = em.createQuery("UPDATE Foo f SET bar = :bar " +
                  "WHERE f.id = :fooId").
                  setParameter("fooId", fooId).
                  setParameter("bar", newBar).
                  executeUpdate();
tx.commit();

问题:是否可以在 JPA 更新中只更新 foo_table,而不更新 bar_table。 DBA 不想给我 bar_table 的更新权限,但 JPA 似乎想要进行“深度”更新并更新 foo_table 和 bar_table。谢谢!

最佳答案

这个解决方案也有效:

@ManyToOne()
@JoinColumn(name="BAR_ID", updatable=false)
Bar bar;

关于java - JPA 更新与加入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15234291/

相关文章:

java - 如何在hypersql数据库(HSQLDB)中设置Rank函数

jsf - 在 JSF 中使用 JSTL 函数

java - 使用 JOIN-Table 的 Hibernate 多对多关联

java - 使用 JNA 解密使用 MS DPAPI 加密的数据

java - Glassfish 上的 Hibernate 不是实体异常

java - 为 @GenerateValue 字段获取 "java.sql.SQLException: No value specified for parameter"

java - hibernate @OneToOne @NotNull

java - Querydsl native jpa查询返回实体而不是对象数组

java - 如何使用 java 应用程序在 SQL 数据库中执行搜索?

jsf - Glassfish 3.1.1 上的 OpenJPA 2.1.1 增强问题