Hibernate Annotations를 사용하여 엔티티를 매핑하려고합니다. 따라서 레코드가 생성되고 저장 될 때 (캐스케이드를 통해) ID가 자동으로 생성됩니다.hibernate generator가 uniqueidentifier와 함께 삽입하지 않을 것입니다.
...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"매개 변수가 아닙니다.
내 테이블 스키마, 지금은 단순히 : 나는 SQL 서버 2008 R2, Express 버전을 사용하고
Character(
id uniqueidentifier, --primary key
alias varchar(max),
firstName varchar(max),
lastName varchar(max),
version int --for hibernate
)
.
내 주석이 KarmaCharacter, 매핑 된 슈퍼 클래스, DomainEntity 및 구체적인 클래스 사이에 분할됩니다
@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", [email protected](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의 최대 절전 모드와 uniqueidentifer 형 ID의의를 생성 할 수있는 올바른 방법을 말할 수있는 경우 및 그들을 제대로 구할 수있게 해 주시면 감사하겠습니다. uniqueidentifier
SQL Server 형식을 사용하는 경우
감사합니다. 그게 정확히 내가 원하는, 나는 최대 절전 모드 newid()를 사용하는 방법을 몰랐다. – RMorrisey
setId() 메서드가 없으므로 @AccessType을 사용합니다. ID를 변경하려면 응용 프로그램 코드가 필요하지 않기 때문에이 방법을 사용했습니다. – RMorrisey
@R 모리시 : 알겠습니다 (하지만 저는 그 세터를 보호 할 것입니다) –