Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/385.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java JPA/Hibernate:映射实体中具有一对多关系的单个元素_Java_Hibernate_Jpa - Fatal编程技术网

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