los*_*and 27 inheritance jpa eclipselink
我的jpa域模型有问题.我只是尝试使用简单的继承,我使用一个简单的Person基类和Customer子类.根据官方文档(JPA和EclipseLink),我只需要基类中的ID-attribute/column.但是当我运行我的测试时,我总是得到一个错误,告诉我客户没有@Id?
首先,我认为问题在于id属性的可见性,因为它首先是私有的.但即使我将其更改为protected(因此子类具有直接访问权限),它也无法正常工作.
人:
@Entity @Table(name="Persons")
@Inheritance(strategy = InheritanceType.JOINED)
@DiscriminatorColumn(name = "TYPE")
public class Person {
@Id
@GeneratedValue
protected int id;
@Column(nullable = false)
protected String firstName;
@Column(nullable = false)
protected String lastName;
Run Code Online (Sandbox Code Playgroud)
顾客:
@Entity @Table(name = "Customers")
@DiscriminatorValue("C")
public class Customer extends Person {
//no id needed here
Run Code Online (Sandbox Code Playgroud)
我的想法和资源都用完了.这应该是一个相当简单的问题,但我只是没有看到它.
los*_*and 36
我通过创建MappedSuperclass自己解决了这个问题
@MappedSuperclass
public abstract class EntityBase{
@Id
@GeneratedValue
private int id;
...setter/getter
}
Run Code Online (Sandbox Code Playgroud)
所有实体都继承自此类.我仍然想知道为什么教程不提这个,但也许它在JPA 2实现中变得更好.
小智 9
我有完全相同的问题.对于子类我得到:
Entity class [...] has no primary key specified. It should define either an @Id, @EmbeddedId or an @IdClass.
在我的情况下,事实证明我忘了添加我的根类persistence.xml
.
确保在以下位置定义了Person和Customer:
<persistence>
<persistence-unit>
...
<class>package.Person</class>
<class>package.Customer</class>
...
</persistence-unit>
</persistence>
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
20222 次 |
最近记录: |