作为一个最小的例子,如果我有这样的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;
}
我在“???”填写什么(或其他地方),以便它被保存在一个结构为:
的表中aid | aval1 | bval1 | bval2
这可能还是我应该重组我的课程?
答案 0 :(得分:1)
直接回答你的问题。
没有什么可以填写???只有实现你想要的。
如果您可以将B类设为@MappedSuperclass而不使其成为@Entity并使A扩展B,则可以实现目标。请注意,您还需要在Class B @Column中创建属性。
这样B不是@Entity,而A类不需要在B中包含属性,哇...
根据OP和更新问题的评论,我担心答案只是不可能这样做。
答案 1 :(得分:1)
你制作B级@Embeddable
。这就是嵌入式的目的。
一个JPA提供程序(DataNucleus
)允许指定类似于JPA AttributeConverter
的类型,将B转换为多个列(标准AttributeConverter
仅转换为一列)所以,如果使用它,你可以避免将@Embeddable
放在你的B类上。这显然是供应商的扩展,如果这对你很重要,那么非便携式。
除此之外,答案是不,你不能做你想做的事。
答案 2 :(得分:-1)
您无法将 @ ??? 替换为任何内容,因为您的pojo只有一个主键。 显然,你的问题没有解决方案。