我正在使用spring boot构建restful web app。我有一个名为“货币”的实体,我有另一个名为“事件”的实体,它们看起来像这样:
@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;
}
}
和Event实体(省略了一些列):
@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,而不是整个对象,所以我怎么样在GET-ing事件中可以设法使用Currency对象(带货币名称和id),但在发布新事件时只插入id?
答案 0 :(得分:0)
首先,除非只有一个事件可以与给定货币相关联,否则您的映射是错误的:事件和货币之间的关联应该是ManyToOne,而不是OneToOne:许多事件共享相同的货币。
现在回答你的问题。保存事件时,您将从浏览器接收包含事件信息的一些JSON对象,包括事件所引用的货币的ID。因此,您需要做的就是获取由此id标识的Currency实例,然后创建并保留包含该货币的Event实例:
Currency currnecy = em.find(Currency.class, currencyId);
// or, if you don't even want to hit the database:
// Currency currnecy = em.getReference(Currency.class, currencyId);
Event event = new Event();
event.setCurrency(currency);
em.persist(event);