Java 将集合传递到JPA存储库错误
我有3个类要通过JPA存储库进行交互:Java 将集合传递到JPA存储库错误,java,hibernate,spring-data-jpa,Java,Hibernate,Spring Data Jpa,我有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(列表单位)
?谢谢!它很有效。不客气,很高兴我可以帮助您。如果您愿意接受,我会发布答案。