持久化实体 "has" 对象的成员而不是对象本身
Persist members of an object that an entity "has" rather than the object itself
作为一个最小的例子,如果我有 2 个这样的 类:
/* A is an entity while B is not. C is another class irrelevant
for this problem. */
class B{
Integer bval1;
Double bval2;
}
@Entity
class A extends C {
@Id
@GeneratedValue(strategy= GenerationType.AUTO)
Integer aid;
@column
Double aval1;
@???
B b;
}
“???”填什么(或其他地方),以便它被保存在 table 中,结构为:
aid | aval1 | bval1 | bval2
这可能还是我应该重组我的 类?
直接回答你的问题。
没有什么可以填写的???只为了达到你想要的。
如果你可以让Class B 成为@MappedSuperclass 而不是@Entity 并且让A 扩展B,你就可以实现你的目标。请注意,您还需要在 Class B @Column 中创建属性。
这样 B 就不是 @Entity 并且 class A 不需要包含 B 中的属性,哇...
更新:
根据 OP 的评论和更新的问题,恐怕答案只是不可能这样做。
你不能用任何东西替换 @??? 因为你的 pojo 只有一个主键。
显然你的问题没有解决方案。
你让classB@Embeddable
。这就是可嵌入的目的。
一个 JPA 提供程序 (DataNucleus
) 允许指定类似于 JPA AttributeConverter
的东西,将 B 转换为 多个 列(标准 AttributeConverter
仅转换为一列)因此,如果使用它,您可以避免将 @Embeddable
放在 B class 上。不过,这显然是供应商扩展,如果这对您很重要,那么不可移植。
除此之外,答案是否定的,你不能为所欲为。
作为一个最小的例子,如果我有 2 个这样的 类:
/* A is an entity while B is not. C is another class irrelevant
for this problem. */
class B{
Integer bval1;
Double bval2;
}
@Entity
class A extends C {
@Id
@GeneratedValue(strategy= GenerationType.AUTO)
Integer aid;
@column
Double aval1;
@???
B b;
}
“???”填什么(或其他地方),以便它被保存在 table 中,结构为:
aid | aval1 | bval1 | bval2
这可能还是我应该重组我的 类?
直接回答你的问题。
没有什么可以填写的???只为了达到你想要的。
如果你可以让Class B 成为@MappedSuperclass 而不是@Entity 并且让A 扩展B,你就可以实现你的目标。请注意,您还需要在 Class B @Column 中创建属性。
这样 B 就不是 @Entity 并且 class A 不需要包含 B 中的属性,哇...
更新:
根据 OP 的评论和更新的问题,恐怕答案只是不可能这样做。
你不能用任何东西替换 @??? 因为你的 pojo 只有一个主键。 显然你的问题没有解决方案。
你让classB@Embeddable
。这就是可嵌入的目的。
一个 JPA 提供程序 (DataNucleus
) 允许指定类似于 JPA AttributeConverter
的东西,将 B 转换为 多个 列(标准 AttributeConverter
仅转换为一列)因此,如果使用它,您可以避免将 @Embeddable
放在 B class 上。不过,这显然是供应商扩展,如果这对您很重要,那么不可移植。
除此之外,答案是否定的,你不能为所欲为。