Java JPQL中的简单多对多选择查询和可嵌入键

Java JPQL中的简单多对多选择查询和可嵌入键,java,database,jpql,Java,Database,Jpql,我有这个模型,只有两个实体,一个用于密钥的可嵌入实体和一个将密钥作为id字段的实体 我想知道,如何编写像“给我一个id为5的人的所有函数”或“给我一个名字为某人的人的所有函数”这样简单的查询 我不知道如何访问这些信息时,有嵌入的关键 我对重写我的模型犹豫不决,因为我必须重写大量关于代码的东西 我如何从关联表中删除一些内容?我真的不知道应该采取什么“方式”来解决这个问题 谢谢你们的提示,伙计们 @Entity @Table(name = "PERSON") public class Person

我有这个模型,只有两个实体,一个用于密钥的可嵌入实体和一个将密钥作为id字段的实体

我想知道,如何编写像“给我一个id为5的人的所有函数”或“给我一个名字为某人的人的所有函数”这样简单的查询

我不知道如何访问这些信息时,有嵌入的关键

我对重写我的模型犹豫不决,因为我必须重写大量关于代码的东西

我如何从关联表中删除一些内容?我真的不知道应该采取什么“方式”来解决这个问题

谢谢你们的提示,伙计们

@Entity
@Table(name = "PERSON")
public class Person {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "person_id")
    private Long id;

    @Column(name = "name", unique = true)
    private String name;
    // .. getters and setters

@Entity
@Table(name = "FUNC")
public class Function {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "function_id")
    private Long id;

    @Column(name = "name")
    private String name;
    // .. getters and setter

@Embeddable
public class PersonFunctionPK {

    @Column(name = "person_id")
    private Long personId;

    @Column(name = "function_id")
    private Long functionId;

    public PersonFunctionPK() {
    }

    PersonFunctionPK(Long personId, Long functionId) {
        this.personId = personId;
        this.functionId = functionId;
    }
    // .. getters and setter

@Entity
@Table(name = "PERSON_FUNC")
public class PersonFunction {

    @EmbeddedId
    protected PersonFunctionPK personFunctionPK;

    public PersonFunction() {}

    public PersonFunction(PersonFunctionPK personFunctionPK) {
        this.personFunctionPK = personFunctionPK;
    }

    public PersonFunction(Long personId, Long functionId) {
        this.personFunctionPK = new PersonFunctionPK(personId, functionId);
    }

    // .. getters and setter for personFunctionPK

您似乎将这些映射为单个独立实体。如果您映射实体之间的关系,那么您应该能够通过简单地调用get方法(不需要jpql)来执行大多数查询

我还没有测试过这段代码,但应该大致正确

@Entity
@Table(name = "PERSON")
public class Person {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "person_id")
    private Long id;

    @Column(name = "name", unique = true)
    private String name;

    @ManyToMany(mappedBy = "persons", cascade=CascadeType.ALL) 
    private Collection<Function> functions;

    // .. getters and setters

@Entity
@Table(name = "FUNC")
public class Function {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "function_id")
    private Long id;

    @Column(name = "name")
    private String name;

    @ManyToMany(cascade=CascadeType.ALL)
    @JoinTable(name = "PERSON_FUNC",
    joinColumns = {@JoinColumn(name = "function_id", referencedColumnName = "id")}, 
    inverseJoinColumns = {@JoinColumn(name = "person_id", referencedColumnName = "id")}) 
    private Collection<Person> persons;

    // .. getters and setter
select distinct f from Function f inner join f.persons p where p.name = "Stefan"