簡體   English   中英

JPA / Hibernate:使用一對多關系映射實體中的單個元素

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM