考虑以下虚拟数据实体及其定义的关系:
实体业务
@Entity
@Table(name = "business")
public class Business {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = "id")
public Long id;
@OneToMany(mappedBy = "Business")
public List<GiveMoney> giveMoney;
@OneToMany(mappedBy = "Business")
public List<RandomForm> randomForm;
@Column(name = "name")
public String name;
-- other fields & getters and setters omitted --
实体GiveMoney
@Entity
@Table(name = "give_money")
public class GiveMoney{
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = "id")
public Long id;
@ManyToOne
Business business;
@OneToOne
@JoinColumn(name = "random_form_id", insertable = false, updatable = false,
referencedColumnName = "id")
public RandomForm randomForm;
@OneToOne
@JoinColumn(name = "person_giving_money_id", insertable = false, updatable =
false,
referencedColumnName = "id")
public PersonGivingMoney personGivingMoney;
@Column(name = "business_id", insertable = false, updatable = false)
public Long business_id;
@Column(name = "person_giving_money_id")
public Integer person_giving_money_id;
@Column(name = "random_form_id")
public Integer random_form_id;
@Column(name = "how_much")
public Integer howMuch;
-- other fields & getters and setters omitted --
实体随机形式
@Entity
@Table(name = "random_form")
public class RandomForm{
@ManyToOne
Business business
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = "id")
public Long id;
@Column(name = "business_id", insertable = false, updatable = false)
public Long business_id;
-- other fields & getters and setters omitted --
我省略了最后一个实体,人GivingMoney,因为它只包含一个由person_giving_money_id和名称引用的ID。
请原谅下划线、可能不正确的可插入/可更新值以及通过不必要的@列注释浪费空间
自然,当我在列表GiveMoney上的控制器中执行getAll时,它将从各自的实体中检索完整的列表以及连接的列。
这是findByBusiness_id在GiveMoneyRepo
List<GiveMoney> findByBusiness_id(Long id);
和控制器
@RequestMapping(path = "/test/{id}")
public List<GiveMoney>findAllWithGivenBusinessId(@PathVariable Long id){
return giveMoneyRepo.findByBusiness_id(id);
}
正如预期的那样,它将过滤GiveMoney列表并返回api中包含给定业务id的所有记录,但是它将同时返回来自同一结果集中的随机记录,即R随机表单实体和个人GivingMoney实体。我相信这是正常的,因为我刚刚通过GiveMoney存储库在GiveMoney列表中指定了我的条件,而没有告诉Spring如何处理其余的实体/记录。
随机形式和GiveMoney都持有business_id作为外键,我想在API中给出一个业务id,并检索一个列表,该列表将根据给定的id显示两个实体的正确记录。简单地说:
FindGiveMoneyByBusiness_Id
我已经阅读了留档,但显然还不够好,因为我确信Spring JPA有办法做到这一点,或者我想我可以考虑创建一个本地查询?
解决了——盯着屏幕看了几个小时后,我意识到我的关系船没有正确设置。正确设置后,由于连接,我能够用一种ID和一种方法匹配记录。