Как фильтровать по одному столбцу, когда этот столбец принадлежит составному первичному ключу в Spring - PullRequest
0 голосов
/ 11 декабря 2018

Имея такой DAO:

@Entity
@Table(name="booking")

public class BookingObject implements Serializable{

private static final long serialVersionUID = 1L;

@EmbeddedId
private CompositeId compositePK;
private LocalDate init_date;
private LocalDate end_date;
private int confirmation;
// getters and setters 

и составной первичный ключ:

@Embeddable
public class CompositeId implements Serializable{

private static final long serialVersionUID = 1L;
@NotNull
private String guest;
@NotNull
private String idhousing;
//getters and setters

Так что теперь я могу звонить findById(new CompositeId(guest, idhousing)); из моего @RestController.Вопрос в том, что если я захочу фильтровать по одному из столбцов составного первичного ключа, например guest.

Я не могу сделать findByguest, так как guest больше не существует в моем DAO BookingObject.Как я могу получить тогда результаты "дай мне все строки, где guest равен ..."

Ответы [ 2 ]

0 голосов
/ 13 декабря 2018

Вы можете попробовать с findByExample

    CompositeId compId= new CompositeId();
    compId.setGuest(guestVal);

    BookingObject bookingObj= new BookingObject ();
    bookingObj.setCompositeId(compId);
    Example<BookingObject> bookExample = Example.of(bookingObj);
    List<BookingObject>  objList=repository.findAll(bookExample);
0 голосов
/ 11 декабря 2018

Альтернативным подходом может быть создание autoincremental key.Это целое число, которое автоматически увеличивается, когда в таблицу вставляется новая строка.Таким образом, составной первичный ключ не нужен.Единственная проблема заключается в том, что пользователи могут забронировать один и тот же дом бесконечное количество раз, в одну и ту же дату и т. Д. Но в вашем сервлете можно реализовать некоторую логику, чтобы проверить, забронировал ли этот пользователь этот дом.См .: w3schools autoincrement

...