JPA 仅使用 PK 持久化
Posted
技术标签:
【中文标题】JPA 仅使用 PK 持久化【英文标题】:JPA-persisting using PK only 【发布时间】:2013-01-02 04:45:34 【问题描述】:我有一个控制数据 DB-TABLE 实体
@Table(name = "A")
class A
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "A_OID")
private Long pk;
和一个引用上述 DB-TABLE 和其他一些的 DB-VIEW 实体
@Table(name = "A_VIEW")
class ARef
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "A_OID")
private Long pk;
private String value;
其中一些value
加入其中。pk
指的是同一行。如何保存我的实体B
,引用ARef
,使用A
,类似这样:
class B
public ARef a;
A a = em.find(A.class, pk);
B b = new B();
b.a = a; // How to do this? Using pk somehow?
还有更多,所以不能简单地改用ARef a = em.find(ARef.class, pk);
。
我知道 OpenJPA 中有某种类型的“原生 SQL”支持,但那太低级了。
【问题讨论】:
JPA 不定义/允许直接更新来自其他类的实体字段(仅通过设置器)。显然,一些 JPA 提供者可能支持它(例如 DataNucleus JPA 支持),但很多不支持。 【参考方案1】:如果您想使用“b.a”进行实例化,首先应将 ARef 更改为 public。
class B
public ARef a;
A a = em.find(A.class, pk);
B b = new B();
b.a = a;
回到问题.. 我使用将引用作为参数从控制器类传递给视图类
像这样:
A a = new A();
ARef aref = new ARef(a);
【讨论】:
很抱歉,但这并不能解决问题(我本来可以做一个em.find(ARef.class)
),我需要立即管理对象,性能至关重要。
我明白了.. 抱歉,我帮不上忙。希望你解决了问题以上是关于JPA 仅使用 PK 持久化的主要内容,如果未能解决你的问题,请参考以下文章
JPA - 持久化对象时何时使用 getTransaction()