我有一个名为 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 实体类的所有字段?
两个用户类实现都有不同的表名,用@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”。字段“用户名”和“密码”没有创建到表中——这就是我遇到的问题。