使用继承存储超类JOINED策略(Hibernate迁移)

时间:2016-11-05 10:31:00

标签: java mysql hibernate jpa inheritance

我已经从Hibernate 4.2.2迁移到5.1.2,现在我在使用 @Inheritance(strategy = InheritanceType.JOINED)存储超类时遇到了问题。

我的推广实体是:

@Entity
@Table(name = "promotion")
@Inheritance(strategy = InheritanceType.JOINED)
@DiscriminatorColumn(name = "promotion_type", discriminatorType = DiscriminatorType.STRING)
@XmlRootElement
public class Promotion implements Serializable {…
…
…
@Basic(optional = false)
@Column(name = "promotion_type", nullable = false, length = 17)
protected String promotionType;
…
…
}

其中一个扩展类是PromotionEvent:

@Entity
@Table(name = "promotion_event")
@PrimaryKeyJoinColumn(name = "promotion_id")
@DiscriminatorValue("event")
@XmlRootElement
public class PromotionEvent extends Promotion {
…
…
}

在Hibernate 4.2.2中一切正常,但现在使用Hibernate 5.1.2存储促销时,我得到以下异常: ERROR pool-2-thread-2 SqlExceptionHelper.logExceptions - 参数索引超出范围(16>参数个数,即15)。

使用插入: 插入促销(金额,client_id,描述,end_datetime,event_end_datetime,event_start_datetime,hide_amount_at_ticket,name,percentage,promotion_type,requires_pda_alert,short_name,show_amount_original_at_ticket,start_datetime,state,status)值(?,?,?,?,?,?, ?,?,?,'事件',?,?,?,?,?,?)

所以,似乎是尝试在指定的 @DiscriminatorColumn 中插入Promotion @DisciminatorValue ,但 @DisicriminatorColumn @Basic 然后坚持下去。所以,这是问题所在。 但是,为什么在Hibernate 4.x中没有发生这种情况?

我可以看到,如果我做了

,它就有效
@Basic(optional = false)
@Column(name = "promotion_type", nullable = false, insertable=false, length = 17)
protected String promotionType;

也就是说, insertable = false ,然后它就可以了,并且 @DiscriminatorValue 会被插入promotion_type。

此外,如果我从Promotion中删除 @DiscriminatorColumn ,似乎一切正常,但在这种情况下我不知道Hibernate如何知道类类型(我想用JOINED策略)。 / p>

  • 是否应该建议将insertable = false?
  • 如果它全部正常工作,是否应该更好地删除 @DiscriminatorColumn
  • 不能 @DiscriminatorColumn @Basic 和可插入属性? 那么为什么在H4.2.2中没有问题?

谢谢。

0 个答案:

没有答案