休眠中的@Id

wer

我有一些代码

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

    @Id
    @Column(name = "id", nullable = false, unique = true)
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

当我尝试将用户添加到表时,我抓住了

org.h2.jdbc.JdbcSQLException: NULL not allowed for column "ID"; SQL statement:
insert into USER (id, birthday, email, first_name, last_name, login, password, id_role) values (null, ?, ?, ?, ?, ?, ?, ?) [23502-181]

这是我的代码添加用户到数据库

stock2.setBirthday(new Date(46));
stock2.setEmail("sss");
stock2.setFirstName("oleg");
stock2.setId(506l);
stock2.setLastName("gubov");
stock2.setLogin("OP");
stock2.setPassword("1");
Role role2 = new Role();
role2.setName("poil");
role2.setId(7l);
stock2.setRole(role2);

HibernateUserDao dao = new HibernateUserDao();
System.out.println(stock2.getId() + " -----------before");
dao.create(stock2);

和创建方法的代码:

public void create(User user) {

    Session session = null;
    try {
        session = HibernateUtil.getSessionFactory().openSession();
        session.beginTransaction();
        session.save(user);
        session.getTransaction().commit();
    } catch (Exception e) {
        session.getTransaction().rollback();
        throw e;
    } finally {
        if (session != null && session.isOpen()) {
            session.close();
        }
    }
}

我认为id是7,但不是NULL。而“ java”则不这么认为。问题出在哪里?

麦琪(Maciej Dobrowolski)

您调用dao.create(),因此您的意图是将行插入数据库。为什么GenerationType.IDENTITY在插入自己的内容时使用id

GenerationType.IDENTITY意味着您JPA Provider将使用表的IDENTITY列(因此,id将在数据库一侧分配)。知道后,Hibernate将不会id在SQL语句中发送您

顺便说一句,它不是生成ID的最佳选择。GenerationType.IDENTITY有一些性能问题(它不支持预分配,并且JPA Provider可能SELECT在插入的每一行之后进行查询,只是想知道生成的id什么)。

为了能够将您自己的值插入为ids,您可以简单地将@GeneratedValue删除(这实际上意味着您需要ids自动生成)注释。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

休眠中的@Id

来自分类Dev

休眠:在@ManyToOne关系中重命名自动生成的ID

来自分类Dev

休眠条件中的休眠获取

来自分类Dev

休眠ID增量oracle

来自分类Dev

休眠复合ID标准

来自分类Dev

父ID不会插入到Java休眠中的子表Whit OneToMany关系中

来自分类Dev

强制休眠以将ID留空

来自分类Dev

休眠中的RAW类型

来自分类Dev

休眠中的对象更新

来自分类Dev

休眠中的多重继承?

来自分类Dev

休眠标准中的功能

来自分类Dev

休眠中获取

来自分类Dev

休眠中的OneToMany问题

来自分类Dev

休眠中的多重继承?

来自分类Dev

休眠中的映射错误

来自分类Dev

在休眠中执行包

来自分类Dev

UWP 从休眠中唤醒

来自分类Dev

休眠一对多级联全部不将子级ID保存在父级中

来自分类Dev

休眠:为列表中的同一对象引用生成不同的(唯一的)ID

来自分类Dev

休眠搜索4.5 Alpha 1无法在java.lang.Byte中猜测FieldBridge的ID

来自分类Dev

休眠-在子表上没有ID的一对多关系中应使用什么主键

来自分类Dev

如何在休眠搜索中基于嵌入式id中的属性之一获得搜索结果?

来自分类Dev

覆盖休眠子类中的主键

来自分类Dev

“在子选择中”的休眠条件

来自分类Dev

命名查询中的休眠错误

来自分类Dev

休眠中的表级锁定

来自分类Dev

休眠-从@ManyToMany中删除查询

来自分类Dev

在休眠搜索中处理并发

来自分类Dev

MergeEventListener中的休眠原始状态