[英]How to map to an existing Hibernate model using jOOQ fetchInto()?
我正在嘗試使用 jOOQ fetchInto()
方法將 map 用於現有的 Hibernate model Organization
(類及其繼承如下)。
Organization organization = jooq().select().from(ORGANIZATION).fetchOne().into(Organization.class);
我遇到的問題是我無法真正理解DefaultRecordMapper中發生了什么,因為我覺得我並不完全熟悉所使用的所有術語。 我試圖弄清楚它如何應用於我的代碼庫中的 Hibernate 類。
到目前為止,我已經嘗試過:
Organization
Hibernate model。Organization
Hibernate model 的name
中添加@Column
注釋。什么有效:
id
字段被正確映射。什么不起作用:
name
字段未映射( null
)。createdAt
和modifiedAt
字段沒有被映射( null
)。 我的問題是:在映射中我是否忽略了一些東西?關於 Hibernate 模型的類、字段、構造函數和注釋我應該注意什么? 我想最終 map 代碼庫中的所有 Hibernate 模型並使用fetchInto
來做到這一點。
謝謝: :)
@Entity
public class Organization extends BaseModel {
@Required public String name;
//... a lot of other code
}
@MappedSuperclass
public class BaseModel extends Model {
/** The datetime this entity was first saved. Automatically set by a JPA prePersist */
@NoBinding
@Column
@Type(type = "org.jadira.usertype.dateandtime.joda.PersistentDateTime")
public DateTime createdAt;
/** The datetime this entity was last modified. Automatically set by a JPA preUpdate */
@NoBinding
@Column
@Type(type = "org.jadira.usertype.dateandtime.joda.PersistentDateTime")
public DateTime modifiedAt;
//...
}
@MappedSuperclass
public class Model extends GenericModel { // Both Model and GenericModel are from the Play Framework
@Id
@GeneratedValue
public Long id;
public Model() {
}
public Long getId() {
return this.id;
}
public Object _key() {
return this.getId();
}
}
jOOQ 不支持所有許多 JPA 和 Hibernate 特定注釋。 從歷史上看,它支持一些 JPA 注釋(因為為什么不支持),但是完整的互操作會過多並且將產品開發時間投入錯誤的地方。 jOOQ 絕不是 JPA 實現。
如前所述,並非所有 JPA 規范都已實現。 例如,一個已知問題是@Column
注釋在 jOOQ 中仍然是強制性的: https://github.com/jOOQ/jOOQ/issues/4586
可能還有其他此類限制,這可能被視為錯誤。 如果您想繼續這條路,請隨時報告他們: https://github.com/jOOQ/jOOQ/issues/new/choose
但是像@MappedSuperclass
或@Type
這樣的東西不太可能被jOOQ 支持。
您已決定使用 jOOQ 創建和運行查詢。 我想您的實際查詢比您顯示的要復雜得多,因為對於該特定查詢,您不需要 jOOQ。
你真的需要map 到 Hibernate 實體嗎? 因為即使您使用 Hibernate,推薦的方法是僅在您要修改實體並將增量存儲回數據庫時才使用實體。 如果是這種情況,請參閱下面的步驟 2。 如果不是這樣,為什么不使用 jOOQ 自己的映射功能來處理任何支持 jOOQ 的 POJO 樣式?
如果您僅使用 jOOQ 構建一個相當復雜的 SQL 查詢,並且您需要Hibernate 實體,那么使用 Hibernate 執行 jOOQ 查詢,如記錄在此一個小實用程序就足夠了:
public static <E> List<E> nativeQuery(EntityManager em, org.jooq.Query query, Class<E> type) {
Query result = em.createNativeQuery(query.getSQL(), type);
List<Object> values = query.getBindValues();
for (int i = 0; i < values.size(); i++)
result.setParameter(i + 1, values.get(i));
return result.getResultList();
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.