保持实体“拥有”的对象的成员而不是对象本身

时间:2016-10-28 03:33:53

标签: java mysql jpa jpa-2.0

作为一个最小的例子,如果我有这样的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

这可能还是我应该重组我的课程?

3 个答案:

答案 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只有一个主键。 显然,你的问题没有解决方案。