用O/R Mapping
建立一个实体
每增加一个实体要让实体的主键自动加1
怎么做?
用注释?高手指导下啊
谢谢

解决方案 »

  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 NULLimport 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;
        }
    }