【发布时间】:2010-03-21 19:45:26
【问题描述】:
我有一个名为 AbstractEntity 的类,它用 @MappedSuperclass 进行了注释。然后我有一个名为 User (@Entity) 的类,它扩展了 AbstractEntity。这两者都存在于名为 foo.bar.framework 的包中。当我使用这两个类时,一切正常。但是现在我已经将一个包含这些文件的 jar 导入到另一个项目中。我想重用 User 类并用一些额外的字段来扩展它。我以为@Entity public class User extends foo.bar.framework.User 可以解决问题,但我发现User 的这个实现只继承了AbstractEntity 的字段,而没有从foo.bar.framework.User 继承。问题是,如何让我的第二个 User 类继承第一个 User 实体类的所有字段?
两个 User 类实现都有不同的表名,用 @Table(name = "name") 定义。
我的课是这样的
package foo.bar.framework;
@MappedSuperclass
abstract public class AbstractEntity {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
protected Long id;
@Column(nullable = false)
@Version
protected Long consistencyVersion;
...
}
package foo.bar.framework;
@Entity
@Table(name = "foouser")
public class User extends AbstractEntity {
protected String username;
protected String password;
....
}
package some.application;
@Entity
@Table(name = "myappuser")
public class User extends foo.bar.framework.User {
protected String firstname;
protected String lastname;
protected String email;
....
}
使用上面的代码,EclipseLink 将创建一个名为“myappuser”的表,其中包含字段“id”、“consistencyVersion”、“firstname”、“lastname”和“email”。 “用户名”和“密码”字段未创建到表中 - 这就是我遇到的问题。
【问题讨论】:
-
你如何确认它只继承了abstractuser的字段?
-
请展示更多代码并解释您的期望和获得的结果(在 Java 级别和 db 级别)。
-
@Bazho,我将我的代码与实际的数据库表进行了比较。 @Pascal Thivent,我已包含您要求的信息。
标签: java jpa eclipselink