gpt4 book ai didi

Spring 启动: Is this correct way to save a new entry which has ManyToOne relationship?

转载 作者:行者123 更新时间:2023-12-04 12:51:36 24 4
gpt4 key购买 nike

我有两个实体 PersonVisit

PersonVisit 具有 OneToMany 关系。我想知道我是否要保存一个新的 Visit 条目,以及使用 RestController 的中间时间。我的方法正确吗?或者还有其他更有效的方法吗?

所以我有以下 Controller ,它从 RequestBody 获取 VisitModel,这样调用它是否正确?

VisitModel 具有人的 ID 和 Visit 实体所需的属性。我使用 person 的 ID 在 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;
}

}

我想知道下面的做法是否正确。或者还有其他更好的方法吗?

最佳答案

当然,您不需要从数据库中获取Person 来将其与Visit 相关联。因为,您只需要有一个Personid 就可以将其保存在外键列personId 中。

如果你使用 JPA EntityManager

  Person person = entityManager.getReference(Person.class, visit.personId);

对于 Hibernate Session

  Person person = session.load(Person.class, visit.personId);

这个方法只是创建一个代理,不做任何数据库请求。

对于 Hibernate Session,我按照@MadhusudanaReddySunnapu 的建议使用了new Person(personId)。一切正常。

What is the difference between EntityManager.find() and EntityManger.getReference()?

Hibernate: Difference between session.get and session.load

关于 Spring 启动: Is this correct way to save a new entry which has ManyToOne relationship?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35775145/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com