gpt4 book ai didi

java - 扩展实体

转载 作者:搜寻专家 更新时间:2023-10-31 19:58:54 24 4
gpt4 key购买 nike

我有一个名为 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") 定义。

我的类(class)是这样的


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”。表中没有创建“用户名”和“密码”字段 - 这就是我遇到的问题。

最佳答案

对于 JPA,默认的继承策略(即未指定时)是 SINGLE_TABLE:每个继承层次结构只有一个表,所有字段都保存在基类的表中。

如果您希望继承层次结构中的每个类都有一个表,并且每个表都包含所有继承字段的列,则需要使用 TABLE_PER_CLASS 策略。

package foo.bar.framework;

@MappedSuperclass
@Inheritance(strategy = InheritanceType.TABLE_PER_CLASS)
abstract public class AbstractEntity {

@Id
@GeneratedValue(strategy = GenerationType.AUTO)
protected Long id;

@Column(nullable = false)
@Version
protected Long consistencyVersion;

...
}

关于java - 扩展实体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2488465/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com