0
我正在使用spring引导来构建宁静的web应用程序。 “外币”我单位打电话,我都称为“事件”的另一个实体,它们看起来就像这样:Spring Boot - 仅当REST POST请求时保存ID,但GET请求时获取对象
@Entity
@Table(name = "currency")
public class Currency {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private long id;
@Column(name = "title")
String title;
public Currency() {
}
public long getId() {
return id;
}
public void setId(long id) {
this.id = id;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
}
和事件实体(某些列被省略):
@Entity
@Table(name = "event")
public class Event {
@OneToOne(fetch = FetchType.LAZY)
@JoinColumn(table = "currency", name = "id")
private Currency currency;
public Event() {}
public Currency getCurrency() {
return currency;
}
public void setCurrency(Currency currency) {
this.currency = currency;
}
}
我已经有货币(美元,欧元等)货币表中,我不希望在这个表中的任何其他数据,我想在事件表中只有id的货币,而不是整个对象,所以我怎么可以管理货币对象(货币名称和id),而GET-ing事件,但是在发布新事件时只插入id?
谢谢您的回答,我了解了您的答案,但我应该在哪里获得该代码,我的意思是在控制器或服务或实体? – Shota
这取决于你。访问EntityManager应该在DAO/Repository组件中。我倾向于直接从控制器访问存储库,除非逻辑很复杂并且/或者由许多控制器共享;在这种情况下,我使用一项服务。但这不是什么重要的事情。代码不重要。重要的是该解决方案的**原则**:根据现有实体的ID,您使用JPA获得对实体本身的引用,并将引用存储到新实体中。 –
正如你所说,主要问题在于它是ManyToOne关系,而不是OneToOne。同样在@JoinColumn中,名称需要是Event entity not id中唯一的列名称(因为发生冲突)。谢谢。 – Shota