如何在Hibernate中使用Id自动增量?

时间:2014-05-21 14:39:41

标签: java hibernate criteria hibernate-criteria

可能是一个愚蠢的问题,但我不明白。 所以我有一个类似的课程:

@Entity
@Table(name="colour"
    ,catalog="car_store"
)
public class Colour  implements java.io.Serializable {


     private Byte id;
     private String name;
     private Set<Car> cars = new HashSet<Car>(0);

    public Colour() {
    }


    public Colour(String name) {
        this.name = name;
    }
    public Colour(String name, Set<Car> cars) {
       this.name = name;
       this.cars = cars;
    }

     @Id @GeneratedValue(strategy=IDENTITY)


    @Column(name="id", unique=true, nullable=false)
    public Byte getId() {
        return this.id;
    }

    public void setId(Byte id) {
        this.id = id;
    }


    @Column(name="name", nullable=false)
    public String getName() {
        return this.name;
    }

    public void setName(String name) {
        this.name = name;
    }

@OneToMany(fetch=FetchType.LAZY, mappedBy="colour")
    public Set<Car> getCars() {
        return this.cars;
    }

    public void setCars(Set<Car> cars) {
        this.cars = cars;
    }
}

所以,如果我试图插入如下:

Session session = HibernateUtil.getSessionFactory().openSession();
Colour newColour = new Colour();

newColour.setName("Deep Sea Blue");
session.save(newColour);

session.getTransaction().commit();

它不应该在此期间自动生成新的id值?因为它没有。

我做错了什么?

感谢。

2 个答案:

答案 0 :(得分:0)

尝试删除

  

@Column(name =“id”,unique = true,nullable = false)

来自

  

public Byte getId()

看起来多余。 只留下:

@Id @GeneratedValue(strategy=IDENTITY)
public Byte getId() {
        return this.id;
    }

答案 1 :(得分:0)

documentation提供的属性类型为Long。在您提供的示例中使用Byte。我认为这可能有问题。尝试将其更改为Long。