簡體   English   中英

Spring Data 在 @Query 的 select 子句中使用參數

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

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