Java 持久化包含实体的对象的成员;有",;而不是对象本身
举个简单的例子,如果我有两个这样的类:Java 持久化包含实体的对象的成员;有",;而不是对象本身,java,mysql,jpa,jpa-2.0,Java,Mysql,Jpa,Jpa 2.0,举个简单的例子,如果我有两个这样的类: /* 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 {
/* 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
这是可能的还是我应该重组我的课程?直接回答您的问题。
没有什么你可以填写的???只是为了实现你想要的 如果您可以使类B成为@MappedSuperclass而不使其成为@Entity,并使其成为扩展B,那么您就可以实现您的目标。注意,您还需要在Class B@Column中创建属性 这样,B就不是@实体,类A不需要包含B中的属性,所以 更新:
根据OP的评论和更新的问题,我担心答案是不可能这样做。您不能用任何东西替换@?,因为您的pojo只有一个主键。
显然,你的问题没有解决办法。你让B类
@可嵌入
。这就是嵌入式的用途
一个JPA提供程序(DataNucleus
)允许指定类似于JPAAttributeConverter
的东西,将B转换为多列(标准的AttributeConverter
仅转换为一列),所以,如果使用它,您可以避免将@Embeddeble
放在B类上。这显然是一个供应商的扩展,所以不可移植,如果这对您很重要的话
除此之外,答案是不,你不能做你想做的事。啊,我不想/不能让它继承B,因为在我的实际问题中,A已经继承了C。@VivekVK好吧,我恐怕答案只是不可能。是的,这也是我的感受。发了这篇文章,想知道是否有我不知道的方法。让我等一会儿,如果没有其他人提出解决方案,我将结束这个问题。你介意把你最后的评论作为你文章的一部分吗?谢谢你的添加!酷@可嵌入似乎是我想要的。谢谢