2

重大な問題があります。私はテーブルを持っています

TICKETINFO

TICKETINFOID pk、REMARK varchar(128)、TICKETDATEタイムスタンプ

これには、このように見える休止状態のアノテーションを持つ対応するクラスがあります

@Entity
@Table(name = "TICKETINFO")
public class Ticketinfo implements Serializable {

    @Id
    @Column(name = "TICKETINFOID")
    private Long id;
    @Column(name = "TICKETDATE")
    private String date;
    @column(name = "REMARK")
    private string remark;

    //getters and setters
}

今の私の仕事は、TICKETINFOテーブルの子テーブルを作成する必要があるということです

TICKETINFO_REMARK

TICKETINFO_REMARK_ID pk、TICKETINFOID fk、REMARK varchar(128)

TICKETINFOIDは、TICKETINFOテーブルからの外部キーであり、対応するTICKETINFOIDのTICKETINFOのREMARKフィールドとともに、TICKETINFO_REMARKのREMARKフィールドに入力する必要があります。

1つのTICKETINFOIDの場合、1つのREMARKがあり、nullになる可能性があります。 Ticketinfo.javaのREMARKのデータ型は、文字列として保持する必要があります。ロジックを追加することはできますが、既存のフローを変更することはできません。

私はひどい混乱状態にあるので私を助けてください....

4

2 に答える 2

0

REMARKフィールドを@Transientとして作成し、@ PreUpdate @PrePersistおよび@PostLoadメソッドを使用して、1対1でマップされたTICKETINFO_REMARKエンティティとの間でコメントフィールドをロードおよび保存できます。TICKETINFO_REMARK側でも同じことができます。

ここに簡単な例があります、それはあなたにアイデアを与えるためだけに、テストされていません。

@Entity
@Table(name = "TICKETINFO")
public class Ticketinfo implements Serializable {

    @Id
    @Column(name = "TICKETINFOID")
    private Long id;
    @Column(name = "TICKETDATE")
    private String date;
    @Transient
    private string remark;
    @OneToOne
    @PrimaryKeyJoinColumn
    private TicketinfoRemark ticketInfoRemark;

    @PostLoad
    public void postLoad() {
        if (ticketInfoRemark != null)
            this.remark = ticketInfoRemark.getRemark();
    }

    @PreUpdate
    @PrePersist
    public void prePersist() {
       if (ticketInfoRemark != null)
           ticketInfoRemark.setRemark(this.remark);
    }
    //getters and setters
}

それが役に立てば幸い。

于 2012-05-29T10:16:19.210 に答える
0

One-To-One が子テーブルのリンクアップのトリックを行うように思えます。発言自体については、アクセサーとミューテーターをハイジャックすることをお勧めします。Hibernate はすぐに必要なものを処理できるとは思わないからです。別のテーブルの属性として何かがある場合、この方法でそれを偽造することは、直交またはベスト プラクティスではありません。変更できない場合は、コードに奇妙なファッジを書き込む非常に正当な理由がない限り、そのままにしておきます。

于 2012-05-29T10:10:11.333 に答える