[英]How to handle Enums as string in spring data jpa Specification
嘗試在數據庫級別使用過濾器數據規范 。 我有一個實體與另一個實體作為實例,其中實例變量類包含一個Emun字段。 這默認為數據庫中枚舉字段的字符串。
@Entity
public class Outer{
@OneToOne(fetch = FetchType.EAGER,cascade = CascadeType.ALL)
@JoinColumn(name = "current_status")
private Status current;
@OneToOne(fetch = FetchType.EAGER,cascade = CascadeType.ALL)
@JoinColumn(name = "past_status")
private Status past;
...
...
@Entity
public class Status{
@Enumerated(EnumType.STRING)
@Column(name = "state")
private State state;
@Id
@GeneratedValue(generator="system-uuid")
@GenericGenerator(name="system-uuid",strategy = "uuid2")
@Column(name = "id")
private String id;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "outer_id")
private Outer outer;
我為這兩個類創建了static meta models
。
如何使用where in
子句創建一個Predicate
來匹配State
使用作為Strings
提供的枚舉值(不是枚舉實例)?
您將實體屬性建模為Enum
和Hibernate,因此,需要在所有JPQL或Criteria查詢中使用枚舉。
因此,您必須將所有String
映射到State
枚舉或使用本機SQL查詢 。
Hibernate不解析本機查詢,它們基於表模型而不是實體模型。 這允許您使用State
枚舉的String
表示形式。
你可以這樣做:
List<State> states = ... // get or initialize your State list here
Query q = em.createNativeQuery("SELECT * FROM Status s WHERE state IN (:states)", Status.class);
q.setParameter("states", states);
List<Status> s = (List<Status>) q.getResultList();
createNativeQuery
方法的第二個參數告訴Hibernate將結果集的每個記錄映射到Status
實體。 管理這些實體,您可以使用它們來更新或刪除映射的數據庫記錄。
要使用此映射,您需要確保查詢選擇實體映射的所有列。 我寫了一系列帖子,了解不同結果映射選項的更多細節:
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.