Java 如何在EmbeddedId中强制执行@Enumerated(EnumType.STRING)
我有以下映射:Java 如何在EmbeddedId中强制执行@Enumerated(EnumType.STRING),java,hibernate,jpa,Java,Hibernate,Jpa,我有以下映射: 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") pu
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是按顺序值(0,1,…)写入的,而不是名称(CLEANER、CRAWLER…)
我想在数据库中写入JobType枚举名称,而不是它的ordinal()值
我可以向@EmbeddedId添加哪个映射来提示jobType列的此属性?方法是直接在字段上使用:
@Enumerated(EnumType.STRING)
如果需要,我想您可以使用@embeddedable
注释JobId
类,然后将@Enumerated
注释放在JobType
字段中:
@Embeddable
public class JobId implements Serializable {
private int accId;
private String env;
@Enumerated(EnumType.STRING)
private JobType jobType;
}
谢谢,我就是这么想的。我只是不想给JobId类添加注释,因为它是公共包中不依赖于JPATH的地方,它会将可嵌入的值对象耦合到
javax.persistence
(这会破坏您的体系结构规则,如果有的话)。不过,我现在还没有看到其他解决方案。