[英]Spring Data use parameters in select clause of @Query
我正在嘗試定義一個通用查詢,它允許我列出實體的可能嵌套的屬性的可能(不同)值。 目標是在過濾實體列表時為最終用戶提供一個下拉選擇。
@Entity
public class Customer {
@Id @GeneratedValue Long id;
@NotNull String name;
@Embedded @NotNull Address address;
...
}
@Embeddable
public class Address {
String country;
String city;
String postalCode;
String street;
String number;
...
}
public interface CustomRepository {
@Query("select distinct ?1 from #{#entityName}")
List<String> findAllValues(String value);
@Query("select distinct ?1.?2 from #{#entityName} where ?1 IS NOT NULL")
List<String> findAllSubValues(String path, String value);
}
public interface RepositoryCustomer extends
CrudRepository<Customer, Long>,
JpaSpecificationExecutor<Customer>,
CustomRepository {}
然后可以按如下方式使用查詢來顯示一個選擇框,用於根據客戶的地址國家篩選客戶列表:
public class SelectionComponent {
@Autowired RepositoryCustomer repo;
ComboBox<String> select = new ComboBox<String>();
@PostConstruct
void onPostConstruct() {
select.setItems(repo.findAllSubValues("address", "country"));
}
}
編譯上述設置導致以下異常:
org.hibernate.QueryException: Parameters are only supported in SELECT clauses when used as part of a INSERT INTO DML statement
好像不支持這個。 任何替代建議?
不要讓這個懸而未決。 我的解決方案通常是避免在涉及 JPA 和 Spring 數據時嘗試表達關系或復雜查詢。
我開始更喜歡為此類需求創建特定的(單一目的)數據庫視圖,並且在我的“業務層”中有一個非常簡單的查詢。 從某種意義上說,這會在數據庫層創建重復或非規范化,但大大降低了覆蓋框架(如 JPA 和 Spring 數據)所需的復雜性。
在這種特殊情況下,我將有一個客戶國家/地區數據庫視圖,我將其映射到 JPA 實體。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.