查询方法与枚举,并访问用户储存库

0

的问题

我有实体驱动和枚举DriverLanguage. 我想要得到的驱动程序的列表谁可以说选定的语言,通过参数储存库的方法。

...
@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
}

现在我用@查询方法。

我第一次的方法:

@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!

然后我读了也许我不应该使用的加入使我试图这样的:

@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

什么我丢在这里?

java jpa spring-boot spring-data-jpa
2021-11-23 11:19:36
1

最好的答案

1

该straightahead 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);
}

错误messaegs告诉你:

  • 路径是d。语言(属性名)
  • DriverLanguage不是一个实体
2021-11-23 12:29:59

其他语言

此页面有其他语言版本

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................