spring-data-jpa - 创建具有一对一关系的查询
问题描述
我有两张桌子......一个贷款表和一个客户表。客户可以进行多笔贷款,但我想将客户一次限制为一笔有效贷款。在第一笔贷款完成之前,他们无法创建第二笔贷款(loan.active=false)
我已经这样设置了我的贷款表:
@Entity
public class Loan implements Serializable {
private static final long serialVersionUID = 0x62B6DA99AA12AAA8L;
@Column @GeneratedValue(strategy = GenerationType.AUTO) @Id private Integer id;
@OneToOne(fetch = FetchType.LAZY)
private Customer customer;
@Column private String dateLoaned;
@Column private String dateToReturn;
@Column private String dateOfReturn;
@Column private Boolean active=false;
和这样的客户表:
@Entity
public class Customer implements Serializable {
private static final long serialVersionUID = 0x63A6DA99BC12A8A8L;
@Column @GeneratedValue(strategy = GenerationType.AUTO) @Id private Integer id;
@Column private String firstname;
@Column private String surname;
@Column private String address;
@Column private String town;
@Column private String postcode;
@Column (unique=true) private String personalnumber;
@Column (unique=true) private String emailaddress;
@OneToOne(fetch = FetchType.EAGER)
private Loan loan;
这使我可以为同一客户创建新贷款。到现在为止还挺好。
我想做一个查询,让我可以找到客户是否已经有活跃的贷款。
到目前为止,我的贷款库是:
@Query("select loan_id from Loan l where l.customer.id = :customerId and l.active = true")
Boolean customerHasActiveLoan(@Param("customerId") Integer customerId);
这是正确的方法吗?
解决方案
在spring-data-jpa
你可以拥有@Query
或编写一个生成查询的方法。没有什么错,@Query
但是因为您的存储库方法非常简单,您也可以仅使用方法名称
例如,相当于:
//Will return the active loan, if exists, or null
@Query("select l from Loan l where l.customer.id = :customerId and l.active = true")
public Loan getActiveLoad(@Param("customerId") Integer customerId)
可以简化为
public Local findOneByCustomerIdAndActiveIsTrue(Long id)
有时method name
方法可以生成长方法名称,因此,如果您愿意,可以使用@Query
注解
推荐阅读
- git - 自动转换 git repo
- django - Django:将图像插入 PostgreSQL (PgAdmin4)
- mysql - 是否可以显示 MySQL 服务器的数据库,将其放入组合框中,并将其内容显示在 VB.Net 中的 datagridview 表中?
- elasticsearch - 如何在elasticsearch的搜索结果中获取搜索字符串的开始偏移量和结束偏移量
- python - 可视化 Python 函数流(例如树或概念图)
- sql - 了解 DateTime 列上的 SQL 索引
- sql - 如何将日期和时间维度合并到 DateTime?
- azure - Azure Databricks 作业的 DevOps
- c++ - 为什么用 std::thread 调用复制构造函数 3 次?
- ruby-on-rails - 如何将标头注入 OmniAuth 模拟测试