【问题标题】:Find elements in a collection field Spring Data JPA Query在集合字段中查找元素 Spring Data JPA Query
【发布时间】:2018-06-28 14:43:36
【问题描述】:

我有一个实体包含一个集合字段

@Entity
@Table(name = "SERVICE")
    public class Service {

@Id
    @GeneratedValue(strategy = GenerationType.AUTO, generator = "SEQUENCE")
    @SequenceGenerator(name = "SEQUENCE", sequenceName = "SEQUENCE")
    @Column(name = "ID_SERVICE")
    private Integer id;

        @ElementCollection
    @CollectionTable(name = "SERVICE_JOB",
            joinColumns = @JoinColumn(name = "ID_SERVICE", referencedColumnName = "ID_SERVICE"))
    @Column(name = "JOB")
    private List<String> jobs = new ArrayList<String>();
    }

我想返回现场作业包含我的变量“作业”的服务

@Query("SELECT DISTINCT s FROM Service s WHERE ?1 in (s.jobs)")
List<Service> findByJob(String job);

虽然字段作业包含我的变量,但它总是返回一个空列表

有什么建议吗?

【问题讨论】:

    标签: java spring jpa spring-data-jpa


    【解决方案1】:

    尝试自定义查询,您可以像这样使用member of

    @Query("SELECT s FROM Service s WHERE ?1 member of s.jobs")
    List<Service> findByJobs(String job)
    

    【讨论】:

    • 我也试过这个解决方案,但它返回异常nested exception is org.hibernate.exception.SQLGrammarException: could not extract ResultSet
    • 你能告诉我们完整的错误吗?除了你注释的private List&lt;String&gt; jobs?你能告诉我们完整的代码吗
    • @GhizlaneLotfi 你能解释一下你的设计是什么意思吗?你的意思是服务可以有一个列表或其他服务吗?
    • 一个服务有一个工作列表
    • @GhizlaneLotfi 那么你的设计不正确,应该是private List&lt;Job&gt; jobs = new ArrayList&lt;&gt;(); 否?
    【解决方案2】:

    你可以这样做

    @Query("select s from Service s WHERE :job in elements(s.jobs)")
    List<Service> getAllByJobs(@Param("job") String job)
    

    要让它工作,你必须稍微改变你的实体,像这样

    public class Service {
        @ElementCollection
        private List<String> jobs
    }
    

    【讨论】:

    • 我在收到此错误之前尝试了您的解决方案nested exception is org.hibernate.exception.SQLGrammarException: could not extract ResultSet
    猜你喜欢
    • 2020-06-29
    • 2017-10-07
    • 2021-08-27
    • 2021-10-10
    • 1970-01-01
    • 2020-08-23
    • 2019-01-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多