Java JPA/Hibernate:映射实体中具有一对多关系的单个元素
我有以下表格:Java JPA/Hibernate:映射实体中具有一对多关系的单个元素,java,hibernate,jpa,Java,Hibernate,Jpa,我有以下表格: 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
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 ...
}
您正在谈论的功能称为
软删除
。是通过使用Hibernate
的注释@SQLDelete
和@Where
来执行这些操作的示例
然而,要使下面的代码正常工作是很困难的
@TakeFirst
private OrderState orderState
这样编码会更容易
@TakeFirst
private Set<OrderState> orderState // this will be a set containing one entry
@TakeFirst
私有集合orderState//这将是一个包含一个条目的集合
No。但是您可以将旧状态存储在一个rtable中,或者为旧状态添加一个包含true的“old”列,并使用注释。您是否能够获得此问题的优雅解决方案?
@TakeFirst
private Set<OrderState> orderState // this will be a set containing one entry