簡體   English   中英

Hibernate:將類持久化為接口

[英]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導致了這個問題。 它應該存儲Roleid - 這在我們所有的實現中都是可用的。 如何告訴 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM