EJB3.0实体 主键 自增

SARA520 2008-11-09 11:43:00
用O/R Mapping
建立一个实体
每增加一个实体要让实体的主键自动加1
怎么做?
用注释?

高手指导下啊
谢谢
...全文
221 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
方式一:采用数据库自身的自增长列,数据库需要支持自动增长。对于 Oracle 就不能采用这种方式。
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;

@Entity
@Table(name = "USER")
public class User {

private long id;
private String username;
private String password;

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
public long getId() {
return id;
}
public void setId(long id) {
this.id = id;
}

@Column
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}

@Column(unique = true)
public String getUsername() {
return username;
}

public void setUsername(String username) {
this.username = username;
}
}


方式二:对于没有自增列的数据库,如:Oracle,采用 Sequence 方式。
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.SequenceGenerator;
import javax.persistence.Table;

@Entity
@Table(name = "USER")

// name 指定该 Sequence 在 @Id 中引用的名字
// sequenceName 表示数据库中的 Sequence 名称
// allocationSize 访问 Sequence 的递增值,默认为 50
@SequenceGenerator(name = "USER_SEQUENCE", sequenceName = "S_USER", allocationSize = 1)
public class User {

private long id;
private String username;
private String password;

@Id

// generator 指的就是 @SequenceGenerator 中的 name 值
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "USER_SEQUENCE")
public long getId() {
return id;
}
public void setId(long id) {
this.id = id;
}

@Column
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}

@Column(unique = true)
public String getUsername() {
return username;
}

public void setUsername(String username) {
this.username = username;
}
}


方式三:需要在数据库中建一张主键表

按下面的代码为例:
主键表表名为:GENERATOR_TABLE
表结构:
PK_COLUMN VARCHAR NOT NULL,
PK_VALUE LONG NOT NULL

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;
import javax.persistence.TableGenerator;

@Entity
@Table(name = "USER")
public class User {

private long id;
private String username;
private String password;

@Id
@TableGenerator(name = "USER_PK_GENERATOR",
table = "GENERATOR_TABLE",
pkColumnName = "PK_COLUMN",
valueColumnName = "PK_VALUE",
pkColumnValue = "USER_PK",
allocationSize = 1)
@GeneratedValue(strategy = GenerationType.TABLE, generator = "USER_PK_GENERATOR")
public long getId() {
return id;
}
public void setId(long id) {
this.id = id;
}

@Column
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}

@Column(unique = true)
public String getUsername() {
return username;
}

public void setUsername(String username) {
this.username = username;
}
}

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧