我已经从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>
谢谢。