java – hibernate生成器不会与uniqueidentifier一起插入
我正在尝试使用Hibernate Annotations映射实体,以便在创建和保存记录(通过级联)时,会自动生成ID.使用我当前的设置(或我尝试过的其他一些设置),我收到以下错误:
...org.hibernate.exception.ConstraintViolationException: could not insert: [com.gorkwobbler.shadowrun.karma.domain.AttributeScore] ...java.sql.SQLException: Caused by: java.sql.SQLException: Cannot insert the value NULL into column 'id',table 'KARMA_DEV.dbo.Character'; column does not allow nulls. INSERT fails. 我可以看到发出以下插入语句: Hibernate: insert into character (version,alias,firstName,lastName) values (?,?,?) 显然这是错误的,没有“id”参数. 我现在的表模式很简单: Character( id uniqueidentifier,--primary key alias varchar(max),firstName varchar(max),lastName varchar(max),version int --for hibernate ) 我正在使用SQL Server 2008 R2,Express版. 我的注释在映射的超类DomainEntity和具体类KarmaCharacter之间分开: @MappedSuperclass public abstract class DomainEntity implements Serializable /* Needed for HOM retainUnsaved */ { private static final long serialVersionUID = 1L; private String id; private Integer version; @Id @GeneratedValue(strategy=GenerationType.AUTO) @Generated(value=GenerationTime.INSERT) //@GeneratedValue(generator="hibernate-uuid.hex") //@GenericGenerator(name="hibernate-uuid.hex",strategy="org.hibernate.id.UUIDHexGenerator",parameters=@Parameter(name="separator",value="-")) @AccessType(value="field") public String getId() { return id; } @Version @AccessType(value="field") public Integer getVersion() { return version; } } @SuppressWarnings("serial") @Entity @Table(name="character") public class KarmaCharacter extends DomainEntity { private String alias; private String lastName; private String firstName; private SortedSet<AttributeScore> attributeScores; public KarmaCharacter() { //default constructor } @Column @AccessType(value="field") public String getAlias() { return alias; } @Column @AccessType(value="field") public String getFirstName() { return firstName; } @Column @AccessType(value="field") public String getLastName() { return lastName; } //...omitted some transient code and a collection property for brevity public void setAlias(String alias) { this.alias = alias; } public void setFirstName(String firstName) { this.firstName = firstName; } public void setLastName(String lastName) { this.lastName = lastName; } } 如果有人能告诉我在SQL Server中使用hibernate生成uniqueidentifer-type ID的正确方法,并让它们得到正确保存,那将非常感激. 解决方法
实际上,当使用uniqueidentifier SQL Server类型时,Hibernate必须使用newid().但是你当前的注释并没有告诉它这样做.我想你需要 @Id @GenericGenerator(name = "generator",strategy = "guid",parameters = {}) @GeneratedValue(generator = "generator") public String getId() { return id; } 一些补充说明: > GUID列类型实际上是用于保存由Microsoft算法生成的GUID,您不能使用Hibernate的UUID算法. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |