3

次のマッピングがあります。

public enum JobType {
    CLEANER,
    CRAWLER, ...
 }


public class JobId implements Serializable {
    private int accId;
    private String env;
    private JobType jobType;
 }

@SuppressWarnings("serial")
@Entity
@Table(name = "jobs")
public class JobExecution {

    @EmbeddedId
    @AttributeOverrides({
        @AttributeOverride(name = "accId", column = @Column(name = "acc_id")),
        @AttributeOverride(name = "env", column = @Column(name = "env")),
        @AttributeOverride(name = "jobType", column = @Column(name = "agg_type")) })
    private JobId jobId;

    @Enumerated(EnumType.STRING)
    @Column(name = "Job_STATUS")
    private JobStatus jobStatus;

    //...  other staff 
}

ジョブ ステータスの列挙列には、文字列値が含まれる OK が書き込まれます。

しかし、jobType は、名前 (CLEANER、CRAWLER ...) ではなく、序数値 (0,1,...) であると書かれています。

ordinal() 値ではなく JobType 列挙名をデータベースに書き込みたい。

jobType 列のこのプロパティを示唆するために @EmbeddedId に追加できるマッピングはどれですか?

4

1 に答える 1

3

これを行う方法は、@Enumerated アノテーションをフィールドで直接使用することです。

@Enumerated(EnumType.STRING)

JobId必要に応じて、クラスに@Embeddable注釈@Enumeratedを付けて、JobTypeフィールドに注釈を付けることができると思います。

@Embeddable
public class JobId implements Serializable {
    private int accId;
    private String env;

    @Enumerated(EnumType.STRING)
    private JobType jobType;
}
于 2013-03-28T14:06:09.600 に答える