Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/353.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何编写多对多关联表的查询_Java_Sql_Hibernate_Spring Boot_Jpa - Fatal编程技术网

Java 如何编写多对多关联表的查询

Java 如何编写多对多关联表的查询,java,sql,hibernate,spring-boot,jpa,Java,Sql,Hibernate,Spring Boot,Jpa,我有两个实体,它们之间有多对多关系。我想在关联表上写一个查询 Here are the two entities. Craftsmen and Skill. I want to write a query which selects all Craftsmen with a given skill. @Entity @Table(name = "craftsman") public class Craftsman { @Id @Gen

我有两个实体,它们之间有多对多关系。我想在关联表上写一个查询

Here are the two entities. Craftsmen and Skill.
I want to write a query which selects all Craftsmen with a given skill. 

    @Entity
    @Table(name = "craftsman")
    public class Craftsman {

        @Id
        @GeneratedValue(strategy = GenerationType.IDENTITY)
        private Long id;

        @ManyToMany
        @JoinTable(name = "craftman_skill", joinColumns = @JoinColumn(name = "craftman_id", referencedColumnName = "id"), 
            inverseJoinColumns = @JoinColumn(name = "skill_id", referencedColumnName = "id"))
        private List<Skill> skillList;
    }
        @Entity
        @Table(name = "skill")
        public class Skill {
            @ManyToMany(mappedBy = "skillList")
            @JsonBackReference
            private List<Craftsman> craftmanList;
        }
以下是我得到的错误:

Caused by: java.lang.IllegalArgumentException: org.hibernate.QueryException: could not resolve property: skill_id of: com.craftsmen.crafts.persistence.Skill [SELECT c FROM com.craftsmen.crafts.persistence.Craftsman c JOIN c.skillList sl WHERE c.skillList.skill_id = :skillId ]
Caused by: org.hibernate.QueryException: could not resolve property: skill_id of: com.craftsmen.crafts.persistence.Skill [SELECT c FROM com.craftsmen.crafts.persistence.Craftsman c JOIN c.skillList sl WHERE c.skillList.skill_id = :skillId ]

我想问题是,您的
技能
实体确实没有技能id,或者更好,没有
id

您是否尝试为您的
技能
实体提供
id

@Entity
@Table(name = "skill")
public class Skill {
   @Id
   @GeneratedValue(strategy = GenerationType.IDENTITY)
   private Long id;

   @ManyToMany(mappedBy = "skillList")
   @JsonBackReference
   private List<Craftsman> craftmanList;
}
然后将
查询
更改为

SELECT c FROM Craftsman c JOIN c.skillList sl WHERE sl.id = :skillId

这是应该的。

也可以考虑使用jpRePi蓄选项:

public interface CraftsmanRepository extends JpaRepository<Craftsman, String> {
    public List<Craftsman> getBySkillListIn(@NotEmpty List<Skill> skillList);

c.skillList.skill\u id
试图做什么?你已经加入了!为什么不直接做
s1.id
?!!这是JPQL,不是SQL,alsoSkill有一个id,我只是没有发布是偶然的。
@Entity
@Table(name = "craftsman")
public class Craftsman {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    @ManyToMany
    @JoinTable(name = "craftman_skill", joinColumns = @JoinColumn(name = "craftman_id", referencedColumnName = "id"), 
        inverseJoinColumns = @JoinColumn(name = "skill_id", referencedColumnName = "id"))
    private List<Skill> skillList;
}
SELECT c FROM Craftsman c JOIN c.skillList sl WHERE sl.id = :skillId
public interface CraftsmanRepository extends JpaRepository<Craftsman, String> {
    public List<Craftsman> getBySkillListIn(@NotEmpty List<Skill> skillList);
where <condition> And <>condition And <condition> And...