在我的项目中,我有以下情形:
库代码:
@MappedSuperclass
public abstract class AbstractMultiProductTable extends AbstractTable {
@NotNull
@ManyToOne(fetch = FetchType.LAZY, optional = false)
@JoinColumn(name = "product_id", nullable = false, updatable = false)
private AbstractProductTable product;
// getter and setters for product
}
@MappedSuperclass
public abstract AbstractProductTable extends AbstractTable {
}
应用代码(使用库)
@Entity
@Table("product")
public class Product extends AbstractProductTable {
}
@Entity
@Table("order")
public class Order extends AbstractMultiProductTable {
}
我们将Hibernate
与Spring JPA
一起使用。 Hibernate抱怨AbstractProductEntity
会被AbstractMultiProductTable
中的具体实现所替代。
我尝试了以下可行的方案,但是想要一种更优雅,更少代码更改的方法
有效的方法:
库代码:
@MappedSuperclass
public abstract class AbstractMultiProductTable<T extends AbstractProductTable> extends AbstractTable {
@NotNull
@ManyToOne(fetch = FetchType.LAZY, optional = false)
@JoinColumn(name = "product_id", nullable = false, updatable = false)
private T product;
// getter and setters for product
}
应用代码(使用库)
@Entity
@Table("order")
public class Order extends AbstractMultiProductTable<Product> {
}
这涉及为每个扩展Product
的实体添加AbstractMultiProductTable
类型。关于方法或模型的方式有何建议?这里的问题是库代码不会知道要绑定到的应用程序特定实现。应用程序应该提供类型,或者可能有一种方法可以在应用程序启动时更改绑定。不确定...:)
还尝试了hbm
和annotation
的组合。但无法正常运作。