[英]Hibernate Auto-Increment not working
我的數據庫中有一個用Identity(1,1)設置的列,我無法獲得hibernate注釋。 我嘗試創建新記錄時遇到錯誤。
在我的實體中,我有以下內容。
@Entity
@Table(schema="dbo", name="MemberSelectedOptions")
public class MemberSelectedOption extends BampiEntity implements Serializable {
@Embeddable
public static class MSOPK implements Serializable {
private static final long serialVersionUID = 1L;
@Column(name="SourceApplication")
String sourceApplication;
@Column(name="GroupId")
String groupId;
@Column(name="MemberId")
String memberId;
@Column(name="OptionId")
int optionId;
@GeneratedValue(strategy=GenerationType.IDENTITY, generator="native")
@Column(name="SeqNo", unique=true, nullable=false)
BigDecimal seqNo;
//Getters and setters here...
}
private static final long serialVersionUID = 1L;
@EmbeddedId
MSOPK pk = new MSOPK();
@Column(name="OptionStatusCd")
String optionStatusCd;
@Column(name="EffectiveDate")
Date effectiveDate;
@Column(name="TermDate")
Date termDate;
@Column(name="SelectionStatusDate")
Date selectionStatusDate;
@Column(name="SysLstUpdtUserId")
String sysLstUpdtUserId = Globals.WS_USER_ID;;
@Column(name="SysLstTrxDtm")
Date sysLstTrxDtm = new Date();
@OneToMany(mappedBy="option")
List<MemberSelectedVariable> variables =
new ArrayList<MemberSelectedVariable>();
//More Getters and setters here...
}
但是當我嘗試添加新記錄時,我收到以下錯誤。
當IDENTITY_INSERT設置為OFF時,無法在表'MemberSelectedOptions'中為identity列插入顯式值。 我不想將IDENTIY_INSERT設置為ON,因為我希望db中的identity列管理值。
運行的SQL如下; 在哪里可以清楚地看到插入物。
insert into dbo.MemberSelectedOptions
(OptionStatusCd,
EffectiveDate,
TermDate,
SelectionStatusDate,
SysLstUpdtUserId,
SysLstTrxDtm,
SourceApplication,
GroupId,
MemberId,
OptionId,
SeqNo)
values (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
我錯過了什么?
這個組合對我很有用:
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
當您使用@Embeddable
或@EmbeddedId
,主鍵值應該由應用程序提供 (即由非生成的值組成)。 您的@GeneratedValue
注釋將被忽略。
這是一個例子
@Id
@Column(name = "col_id")
@GeneratedValue(strategy = GenerationType.AUTO)
private Long colId;
您可能需要使用@id
標記字段而不指定generator
屬性。
如Hibernate Annotation中所示 - 2.2.3.1。 生成標識符屬性 ,下一個示例使用標識生成器:
@Id @GeneratedValue(strategy=GenerationType.IDENTITY)
public Long getId() { ... }
您不能在復合鍵上使用Generators
你不能手動創建表,一切都會好的。
CREATE TABLE `Forum` (
`name` varchar(255) NOT NULL,
`id` int(11) NOT NULL AUTO_INCREMENT,
`body` varchar(500) DEFAULT NULL,
PRIMARY KEY (name,`id`),
UNIQUE KEY `id` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin2
import java.io.Serializable;
import javax.persistence.Column;
import javax.persistence.EmbeddedId;
import javax.persistence.Entity;
@Entity
public class Forum implements Serializable {
@EmbeddedId
private ForumCompositePK forumPK;
/**
*
*/
private static final long serialVersionUID = 7070007885798411858L;
@Column(length = 500)
String body;
public String getBody() {
return body;
}
public void setBody(String body) {
this.body = body;
}
public void setForumPK(ForumCompositePK forumPK) {
this.forumPK = forumPK;
}
public ForumCompositePK getForumPK() {
return forumPK;
}
}
import java.io.Serializable;
import javax.persistence.Column;
import javax.persistence.Embeddable;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
@Embeddable
public class ForumCompositePK implements Serializable {
/**
*
*/
private static final long serialVersionUID = 8277531190469885913L;
@Column(unique=true,updatable=false,insertable=false)
@GeneratedValue(strategy=GenerationType.IDENTITY)
private Integer id;
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.