[英]Hibernate: Persist class as Interface
我们有一个使用Role
的类Phone
,即。
@Entity
public class Phone{
@Id...
private Integer id;
@Column(name="role_id")
private IRole role;
...
和界面
public interface IRole extends Serializable {
public abstract Integer getId();
...
因此,当我尝试将Phone
保留在我的包中时, IRole
不再是抽象的,它已经是一个具体的实体。 之所以不能直接使用具体类,是因为我们在项目中对Role
实现方式不同。
当我尝试启动 Hibernate 时,出现异常:
org.hibernate.tool.schema.spi.SchemaManagementException: Schema-validation: wrong column type encountered in column [role_id
] in table [phone]; found [int4 (Types#INTEGER)], but expecting [bytea (Types#VARBINARY)]
我认为IRole
导致了这个问题。 它应该存储Role
的id
- 这在我们所有的实现中都是可用的。 如何告诉 Hibernate 它应该使用Integer
类型而不是某些interface
插值?
寻找一个可以在Postgres
以及MariaDB
工作的解决方案。
您可以为每个特定的IRole
接口实现实现一个属性转换器,然后使用它们。
@Convert(converter=RoleA.class)
@Column(name="role_id_a")
private IRole roleA;
@Convert(converter=RoleB.class)
@Column(name="role_id_b")
private IRole roleB;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.