我有物體驅動程式和列舉驅動程式語言。我想通過存盤庫方法中的引數獲取可以說所選語言的驅動程式串列。
...
@Entity
public class Driver{
private Long id;
private firstName;
@ElementCollection(targetClass = DriverLanguage.class)
@Enumerated(EnumType.STRING)
@CollectionTable(name = "driver_language",
joinColumns = @JoinColumn(name = "driver_language_id"))
@Column(name = "driver_language")
private Set<DriverLanguage> languages = new HashSet<>();
}
public enum DriverLanguage {
ENGLISH,
GERMAN
}
現在我正在使用@Query 方法。
我的第一種方法:
@Repository
public interface DriverRepository extends JpaRepository<Driver, Long> {
@Query("SELECT d "
"FROM Driver d "
"JOIN DriverLanguage dl on d.id = dl.driver_language_id "
"WHERE dl.driver_language = ?1")
List<Driver> findByLanguage(String language);
}
ERROR: Caused by: org.hibernate.hql.internal.ast.QuerySyntaxException: Path expected for join!
然后我讀到也許我不應該使用 JOIN 所以我嘗試了這個:
@Repository
public interface DriverRepository extends JpaRepository<Driver, Long> {
@Query("SELECT d "
"FROM Driver d, DriverLanguage dl "
"WHERE d.id = dl.driver_language_id AND dl.driver_language = ?1")
List<Driver> findByLanguage(String language);
}
ERROR: Caused by: org.hibernate.hql.internal.ast.QuerySyntaxException: DriverLanguage is not mapped
我在這里缺少什么?
uj5u.com熱心網友回復:
直接的 JPQL 查詢可能是
@Repository
public interface DriverRepository extends JpaRepository<Driver, Long> {
@Query("SELECT d "
"FROM Driver d "
"WHERE ?1 MEMBER OF d.languages")
List<Driver> findByLanguage(DriverLanguage language);
}
錯誤訊息告訴您:
- 路徑是 d.languages(屬性名稱)
- DriverLanguage 不是物體
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/363839.html
上一篇:如何使用CosmosDB中的IQueryable按多列排序?
下一篇:春季啟動中的AWSSQS、DLQ
