Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/307.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java @Entity和@Embeddeble之间的固有性_Java_Database_Hibernate_Jpa - Fatal编程技术网

Java @Entity和@Embeddeble之间的固有性

Java @Entity和@Embeddeble之间的固有性,java,database,hibernate,jpa,Java,Database,Hibernate,Jpa,动机 我的应用程序根据表foo的内容向某些web服务发出请求。我想记录这些请求(在数据库中)以及用于生成请求的foo行的值。尽管如此,由于表foo中的数据可能会随时间而变化,所以我需要记录行的确切内容(而不是它的id)。我正在使用Hibernate,所以我想,我可以在表示请求的实体中嵌入一行foo。要有干净的类层次结构,我希望有如下内容: class Foo { /* * Here goes some properties of Foo, which specify colum

动机

我的应用程序根据表foo的内容向某些web服务发出请求。我想记录这些请求(在数据库中)以及用于生成请求的foo行的值。尽管如此,由于表foo中的数据可能会随时间而变化,所以我需要记录行的确切内容(而不是它的id)。我正在使用Hibernate,所以我想,我可以在表示请求的实体中嵌入一行foo。要有干净的类层次结构,我希望有如下内容:

 class Foo
 {
   /*
    * Here goes some properties of Foo, which specify columns names etc.
    */
 }

 @Embeddable
 class EmbeddableFoo extends Foo
 {
   //EmbeddableFoo should have the same properties as Foo
 }

 @Entity
 class EntityFoo extends Foo
 {
   @Id
   Long getId() { //EntityFoo  has some id }
   //EntityFoo should have the same properties as Foo, except that
   //it has id
 }
问题

这将不起作用,因为EmbeddeDableFoo看不到Foo的属性。我可以在Foo上添加@Inheritation注释,这样EntityFoo*可以看到Foo的*属性,但这并不能解决我在EmbeddedBleFoo上的问题

问题


是否有一种简单的方法(即不需要编写大量冗余代码)让@Embeddeble和@Entity*从同一个类继承?

您是否检查了注释
@MappedSuperclass
?这可能就是你要找的

指定一个类,该类的映射信息应用于 从中继承的实体。映射的超类没有单独的 为其定义的表

可以映射使用MappedSuperclass注释指定的类 与实体的方式相同,只是映射仅适用于 由于映射的超类不存在表,因此无法将其复制到其子类 它本身当应用于子类时,继承的映射将 在子类表的上下文中应用。地图信息可能会 通过使用AttributeOverride和 AssociationOverride注释或相应的XML元素