Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.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 将集合传递到JPA存储库错误_Java_Hibernate_Spring Data Jpa - Fatal编程技术网

Java 将集合传递到JPA存储库错误

Java 将集合传递到JPA存储库错误,java,hibernate,spring-data-jpa,Java,Hibernate,Spring Data Jpa,我有3个类要通过JPA存储库进行交互: 目标-用户目标字典。与“单元”类的连接为多(目标)对一(单元)。因此,每个目标都可以与一个单元相关联 角色-拥有系统中的用户权限。与单元类的连接方式与目标相同。因此,每个角色也只能有一个单元 单位持有细分。被上面两个类用作字典 目标实体由goalrepository和goalservicepimpl支持,这是我的CRUD主界面 问题:我想将角色对象的集合传递给存储库(GoalServiceImpl),以获得一组“目标”,其单位与角色集相同。所以我可以通过传

我有3个类要通过JPA存储库进行交互:

  • 目标-用户目标字典。与“单元”类的连接为多(目标)对一(单元)。因此,每个目标都可以与一个单元相关联
  • 角色-拥有系统中的用户权限。与单元类的连接方式与目标相同。因此,每个角色也只能有一个单元
  • 单位持有细分。被上面两个类用作字典 目标实体由goalrepository和goalservicepimpl支持,这是我的CRUD主界面

    问题:我想将角色对象的集合传递给存储库(GoalServiceImpl),以获得一组“目标”,其单位与角色集相同。所以我可以通过传递一个角色参数来过滤目标列表

    我把这个加到我的积木上
    Iterable getGoalsByUnits(列表单位)
    并得到一个错误:

     “Caused by: java.lang.IllegalArgumentException: Failed to create query for method public abstract java.lang.Iterable com.platform.repository.GoalRepository.getGoalsByUnits(java.util.Set)! No property units found for type Goal! Did you mean 'unit'?”
    
    我做错了什么?Mybe是因为每个目标对象只有一个单位? 解决我的任务的最好方法是什么

    目标类

    public class Goal {
    
       @Id
       @GeneratedValue(strategy = GenerationType.IDENTITY)
       @Column(name = "ID", nullable = false)
       private Long id;
    
       @Column(name = "DESCR", length = 255, nullable = false)
       public String descr;
    
       @ManyToOne
       @JoinColumn (name="UNIT_ID", nullable = false)
       public Unit unit; //UNIT IS HERE!
    
       @Column(name = "VL")
       private float vl;
    
    
    @Entity
    @Table(name="UNITS", schema="MAPP")
    public class Unit {
        @Id
        @GeneratedValue(strategy = GenerationType.IDENTITY)
        @Column(name = "ID", nullable = false)
        private Long id;
    
        @Column(name = "UNITNAME")
        private String unitname;
    
        @OneToMany(mappedBy = "unit")
        Set<Role> role;
    
    
    @Entity
    @Table(name="ROLES", schema="MAPP")
    public class Role implements GrantedAuthority {
    
        @Id
        @GeneratedValue(strategy = GenerationType.IDENTITY)
        @Column(name = "ID", nullable = false)
        private Long id;
    
        @Column(name = "ROLENAME")
        private String rolename;
    
        @Column(name = "FULLNAME")
        private String fullname;
    
        @ManyToOne(fetch = FetchType.EAGER)
        @JoinColumn(name = "UNIT_ID")
        private Unit unit;
    
        @ManyToOne(fetch = FetchType.EAGER)
        @JoinColumn(name = "PERMISSION_ID")
        private Permission permission;
    
    单元类

    public class Goal {
    
       @Id
       @GeneratedValue(strategy = GenerationType.IDENTITY)
       @Column(name = "ID", nullable = false)
       private Long id;
    
       @Column(name = "DESCR", length = 255, nullable = false)
       public String descr;
    
       @ManyToOne
       @JoinColumn (name="UNIT_ID", nullable = false)
       public Unit unit; //UNIT IS HERE!
    
       @Column(name = "VL")
       private float vl;
    
    
    @Entity
    @Table(name="UNITS", schema="MAPP")
    public class Unit {
        @Id
        @GeneratedValue(strategy = GenerationType.IDENTITY)
        @Column(name = "ID", nullable = false)
        private Long id;
    
        @Column(name = "UNITNAME")
        private String unitname;
    
        @OneToMany(mappedBy = "unit")
        Set<Role> role;
    
    
    @Entity
    @Table(name="ROLES", schema="MAPP")
    public class Role implements GrantedAuthority {
    
        @Id
        @GeneratedValue(strategy = GenerationType.IDENTITY)
        @Column(name = "ID", nullable = false)
        private Long id;
    
        @Column(name = "ROLENAME")
        private String rolename;
    
        @Column(name = "FULLNAME")
        private String fullname;
    
        @ManyToOne(fetch = FetchType.EAGER)
        @JoinColumn(name = "UNIT_ID")
        private Unit unit;
    
        @ManyToOne(fetch = FetchType.EAGER)
        @JoinColumn(name = "PERMISSION_ID")
        private Permission permission;
    
    目标存储库

    public interface GoalRepository extends CrudRepository<Goal, Long> {
    
        Iterable<Goal> getGoalsByUnit (Unit unit);
        Iterable<Goal> getGoalsByUnits (List<Unit> unit);
    }
    
    
    public interface GoalRepository扩展了crudepository{
    Iterable getGoalsByUnit(单位);
    Iterable getGoalsByUnits(列表单位);
    }
    
    目标存储库界面

    public class GoalServiceImpl implements GoalService {
    
    public Iterable<Goal> getByRoles (Set<Role> roles) {
        List<Unit> units = new ArrayList<>();
        roles.forEach(e -> {
                units.add(e.getUnit());
        });
        return rep.getGoalsByUnits(units);
    }
    
    public类GoalServiceImpl实现GoalService{
    公共Iterable getByRoles(设置角色){
    列表单位=新的ArrayList();
    角色。forEach(e->{
    units.add(e.getUnit());
    });
    返回代表getGoalsByUnits(单位);
    }
    
    Sprint Data JPA为存储库提供了许多方法,帮助我们定义从DB获取数据的方式,而无需编写查询


    在您的例子中,您想在
    子句中使用
    ,但该子句不能用复数形式表示,因此您的方法需要命名为
    getGoalsByUnitIn

    您是否尝试过
    getGoalsByUnitIn(列表单位)
    ?谢谢!它很有效。不客气,很高兴我可以帮助您。如果您愿意接受,我会发布答案。