Создание запроса с отношением один к одному - PullRequest
0 голосов
/ 09 октября 2018

У меня есть две таблицы ... таблица заем и таблица клиент .Клиент может сделать несколько займов, но я бы хотел ограничить клиента одним активным займом за раз.Они не могут создать второй кредит до тех пор, пока первый кредит не будет завершен ( 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);

Это правильный способ сделать это?

1 Ответ

0 голосов
/ 10 октября 2018

В 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 аннотацию

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...