[英]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.