[英]JPA/Hibernate: mapping a single element in an entity with an one-to-many relationship
我有以下表格:
TABLE Orders (
ID BIGINT NOT NULL PRIMARY KEY,
... other columns ...
)
TABLE Order_States (
ID BIGINT NOT NULL PRIMARY KEY,
Order_ID BIGINT NOT NULL FOREIGN KEY REFERENCES Orders(ID),
State_Type VARCHAR(30) NOT NULL,
State_Date DATETIME NOT NULL,
... other columns ...
)
以下映射:
@Entity
@Table(name = "orders")
class Order {
@Id
@GeneratedValue
private Long id;
@OneToMany(mappedBy = "order")
@OrderBy("stateDate DESC")
private List<OrderState> orderStates
public OrderState getCurrentState() {
return orderStates.get(0);
}
public void setCurrentState(OrderState state) {
state.setStateDate(new Date());
orderStates.add(state);
}
... other members ...
}
@Entity
@Table(name = "order_states")
class OrderState {
@Id
@GeneratedValue
private Long id;
@ManyToOne
@JoinColumn(name = "order_id")
private Order order;
@Enumerated(EnumType.STRING)
@Column(name = "state_type")
private StateType stateType;
@Temporal(TemporalType.TIMESTAMP)
@Column(name = "state_date")
private Date stateDate;
... other members ...
}
我不想在我的映射中包含所有訂單的狀態(它們僅僅是出於歷史原因),而只是訂單的當前狀態,這是由最新狀態的日期決定的。
這有什么注釋嗎? 例如(我猜):
@Entity
@Table(name = "orders")
class Order {
...
@OneToMany(mappedBy = "order")
@OrderBy("stateDate DESC")
@TakeFirst
private OrderState orderState
... getter and setter for orderState ...
...
}
您正在談論的功能稱為soft delete
。 下面是一個使用Hibernate
的注釋@SQLDelete
和@Where
來做這些事情的例子。
但是,使代碼工作變得困難
@TakeFirst
private OrderState orderState
像這樣編碼會更容易
@TakeFirst
private Set<OrderState> orderState // this will be a set containing one entry
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.