gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 17:53:08 25 4
gpt4 key购买 nike

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

  1. 目标 - 用户目标的字典。与“Unit”类连接为多(目标)到一(单位)。因此,每个目标只能与一个单元关联。
  2. 角色 - 拥有系统中的用户权限。与Unit类的连接方式与Goal相同。因此每个角色也只能有一个单位。
  3. Unit - 包含分割。上面两个类用作字典。

Goal 实体由 GoalReposotoryGoalServiceImpl 支持,这是我的 CRUD 主接口(interface)。

问题:我想将角色的对象集合传递到存储库(GoalServiceImpl)以获取一组“目标” ”,它具有与角色集相同的Unit。因此,我可以通过传递角色参数来过滤目标列表。

我将其添加到我的 CrudRepostitory 中 Iterable<Goal> getGoalsByUnits (List<Unit> unit);并收到错误:

 “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'?”

我做错了什么?也许是因为我对于每个 Goal 对象只有一个 Unit ?解决我的任务的最佳方法是什么?

目标类别

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 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);
}

最佳答案

Sprint Data JPA 提供了大量 naming conventions存储库方法可以帮助我们定义从数据库获取数据的方式,而无需编写查询。

在您的情况下,您想要使用 in 子句,但无法使用复数实现,因此您的方法需要命名为 getGoalsByUnitIn

关于java - 将集合传递到 JPA 存储库错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60762184/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com