我正在创建 JPA 实体来存储有关客户的信息。我有一个名为客户的抽象类。它有两个子类,称为购物者和用户。购物者和用户都以键值对的形式拥有关于他们的元数据,我创建了另一个名为 MetaData 的类来存储这些元数据。我的问题是,如何通过客户的抽象类向元数据添加有序列?这是一些代码,因此您可以看到我在说什么:
@Inheritance( strategy = TABLE_PER_CLASS )
public abstract class Customer implements Serializable
{
@OneToMany( mappedBy = "parent", orphanRemoval = false )
@OrderColumn //THIS IS CAUSING AN ERROR, BUT I WANT AN ORDERED COLUMN - PLEASE HELP
private List<MetaDataType> metaData;
}
用户和购物者类本质上是相同的,这里没什么特别的——
@Entity
public class User extends Customer implements Serializable
{
...some user specific stuff
}
这是元数据类-
@Entity
public class MetaData implements Serializable
{
@EmbeddedId
protected MetaDataId id;
@ManyToOne
@JoinColumn( name = "parentGuid", referencedColumnName = "guid", insertable = false, updatable = false )
protected Customer parent;
....
}
如果我只有一个子类说用户,这可以正常工作,并且元数据表有一个名为 metaData_order 的列,一切都很好。问题是当我添加 Shopper 实体时,现在 metaData 表尝试插入两个 MetaData_order 列并抛出此异常 -
java.sql.SQLSyntaxErrorException: Column name 'METADATA_ORDER' appears more than once in the CREATE TABLE statement.
Call: CREATE TABLE METADATA (VALUE VARCHAR(255), parentGuid VARCHAR(255) NOT NULL,
name VARCHAR(255) NOT NULL, metaData_ORDER INTEGER, metaData_ORDER INTEGER, PRIMARY
KEY (parentGuid, name))
如果我添加实现 Customer 的第三个子类,该语句会尝试插入三个 metaData_ORDER 列。显然我没有正确地做这个抽象,我错过了什么?