У меня есть две сущности Person
и Visit
Person
имеет отношения OneToMany с Visit
. Мне было интересно, хочу ли я сохранить новую запись Visit и использовать RestController. Мой подход правильный? Или есть другой способ, более эффективный?
Итак, у меня есть следующий контроллер, который принимает VisitModel
из RequestBody, это правильный способ называть его так?
VisitModel имеет идентификатор человека и необходимые свойства для сущности Visit. Я использую идентификатор человека для поиска в personRepository соответствующей записи Person, после чего отправляю ее новому экземпляру Visit, а затем использую visitRepository для ее сохранения.
@RequestMapping(value="", method=RequestMethod.POST)
public String checkIn(@RequestBody VisitModel visit) {
Person person = personRepository.findById(visit.personId);
Visit newVisit = new Visit(visit.getCheckIn, person);
visitRepository.save(newVisit);
return "success";
}
Сущность посещения выглядит следующим образом
@Entity
public class Visit {
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
private Long id;
@JsonProperty("check_in")
private Date checkIn;
@JsonProperty("check_out")
private Date checkOut;
@ManyToOne
@JoinColumn(name="personId")
private Person person;
public Visit(Date checkIn, Person person) {
this.checkIn = checkIn;
this.person = person;
}
public Date getCheckIn() {
return checkIn;
}
public void setCheckIn(Date checkIn) {
this.checkIn = checkIn;
}
public Date getCheckOut() {
return checkOut;
}
public void setCheckOut(Date checkOut) {
this.checkOut = checkOut;
}
public Person getPerson() {
return person;
}
}
Хочу знать, что следующий подход правильный. Или есть другой способ лучше?
new Person(personId)
запись из базы данных не загружалась. Однако он хорошо работал с EntityManager. И сSession
я не мог ввести его с помощью@Autowired
. Как я могу получить экземпляр сеанса? 03.03.2016EntityManager
- используйтеgetReference()
илиnew Person(personId)
(если работает, конечно). Не смешивайте, используяEntityManager
иSession
. Чтобы ответить на ваш вопрос: вы можете создать сеанс изEntityManager
Session session = entityManager.unwrap(Session.class);
04.03.2016