【发布时间】:2014-09-02 05:17:28
【问题描述】:
我有几个状态值的枚举
新、已审核、已发布、待处理、已更新、垃圾邮件、重复、不相关、未发布
我不想将它们用作枚举,因此为此创建了一个实体。为方便起见,我想在实体中保留一列以从枚举初始化状态并将该枚举值转换为状态实体的对象。为此..
我有两个实体。我想引用来自另一个实体的值的列。
基本上我想用公式初始化一个对象。
实体是
@Entity
@Table(name = "event_status")
public class EventStatus {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name="eventStatusId")
private Integer eventStatusId;
@Enumerated(EnumType.STRING)
@Column(unique = true,name="eventStatusType")
private EventStatusType eventStatusType;
public EventStatus() {
this(EventStatusType.NEW);
}
public EventStatus(EventStatusType eventStatusType) {
super();
this.eventStatusType = eventStatusType;
}
public Integer getEventStatusId() {
return eventStatusId;
}
public EventStatusType getEventStatusType() {
return eventStatusType;
}
public void setEventStatusId(Integer eventStatusId) {
this.eventStatusId = eventStatusId;
}
public void setEventStatusType(EventStatusType eventStatusType) {
this.eventStatusType = eventStatusType;
}
}
我有另一个实体,我在其中引用该实体的对象
@Entity
@Table(name = "event_")
@Inheritance(strategy = InheritanceType.JOINED)
public abstract class Event implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@Column(name = "id_")
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
@Transient
public EventStatusType eventStatusType = EventStatusType.NEW;
@ManyToOne(fetch = FetchType.EAGER, targetEntity = EventStatus.class)
@Formula("select * from event_status where eventStatusId= 1")
private EventStatus status;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public EventStatus getStatus() {
System.out.println("Event.getStatus() " + status);
return status;
}
public void setStatus(EventStatus status) {
System.out.println("Event.setStatus()");
this.status = status;
}
}
这没有给出任何异常,但没有初始化这个值。 是否可以使用事件实体中的 eventStatusType 值初始化此 EntityStatus
【问题讨论】:
-
@Formula必须返回通常会返回column的映射。所以在这种情况下,Hibernate 需要获取 status-ID。这应该是@Formula的结果,而不是选择该对象... -
你的意思是我必须将我的 sql 更改为 'select eventStatusId from event_status where eventStatusId= 1'
-
好吧,不!这无济于事,因为:我们需要的是创建一些智能选择......事实上,我们应该说@Formula(“(1)”)。信不信由你,这对 Hibernate 来说已经足够了。为什么? Hibernate 将采用该值并使用提供的 id 搜索
EventStatus... 有意义吗?你的方法会奏效,但不是我们需要的。我们正在尝试用一些更智能的值替换该列,在 DB 端进行评估... -
无法给出异常'java.sql.SQLException:字段'status'没有默认值'
-
@Formula 并不复杂。当没有适当值的列时,它确实可以帮助我们解决问题。我们可以计算它。但问题是:它可能是只读的......