【问题标题】:How to use Id autoinkriment at Hibernate?如何在 Hibernate 中使用 ID 自动递增?
【发布时间】:2014-05-21 14:39:41
【问题描述】:

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

@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 值吗?因为它没有。

我做错了什么?

谢谢。

【问题讨论】:

  • 我已经看到了,我想我的映射是正确的。我获取并设置所有类的属性等,如果我什至将注释放在声明类属性的前面,就像在示例中一样,它根本不会改变任何东西,在其他方面我已经得到了所有的东西,就像在示例中一样.

标签: java hibernate criteria hibernate-criteria


【解决方案1】:

documentation 提供的属性类型是Long。在您提供的示例中,使用了字节。我认为这可能存在问题。尝试将其更改为 Long。

【讨论】:

    【解决方案2】:

    尝试删除

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

    来自

    公共字节 getId()

    看起来是多余的。 并且只离开:

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

    【讨论】:

    • 我同意,已将其删除。但是,不幸的是仍然没有生成新的 id。
    • 请同时查看this
    • Mysql数据库本身配置正确。当我做 INSERT INTO color (name) VALUES("Deep Sea Blue");它工作得很好。因此,如果不是我的插入代码或映射不是数据库本身。根据那篇文章,它还能是什么,Hibernate?我不明白。你能帮帮我吗?
    • 您是否尝试将策略更改为自动?而且我还看到在 Hibernate 文档中使用了 Long 类型,而您使用的是 Byte。我认为这可能存在问题。尝试将其更改为 Long。
    • 天哪!非常感谢!我已经在映射中将类型更改为 Long 并且它就在那里!将策略更改为自动不会产生任何影响。请张贴答案。再次感谢。
    猜你喜欢
    • 2013-04-27
    • 2016-02-19
    • 2017-04-02
    • 1970-01-01
    • 2019-05-04
    • 2016-03-07
    • 1970-01-01
    • 2010-10-04
    • 2015-03-10
    相关资源
    最近更新 更多