【问题标题】:Hibernate session.save() always returning 1休眠 session.save() 总是返回 1
【发布时间】:2014-12-17 11:19:01
【问题描述】:

我在 session.save() 中得到了一个奇怪的结果。它始终返回 1。但数据库中的值已正确插入。请提出您认为有疑问的任何内容

代码

session = getSessionFactory().openSession();
Transaction transaction = session.beginTransaction();
userId = (Long)session.save(user);
transaction.commit();

用户 - 持久性

@Id
@GeneratedValue(strategy=GenerationType.SEQUENCE)
@GenericGenerator(name = "increment", strategy = "increment")
@Column(name = "ID")
public Long getId() {
    return id;
}

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

@Column(name = "USERNAME", length = 100)
public String getUsername() {
    return username;
}

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

@Column(name = "PASSWORD", length = 100)
public String getPassword() {
    return password;
}

public void setPassword(String password) {
    this.password = password;
}

@OneToOne(fetch = FetchType.EAGER)
@MapsId
@JoinColumn(name = "ROLEID")
public Role getRole() {
    return role;
}

public void setRole(Role role) {
    this.role = role;
}

@Column(name = "IMAGEURL", length = 2000)
public String getImageUrl() {
    return imageUrl;
}

public void setImageUrl(String imageUrl) {
    this.imageUrl = imageUrl;
}

版本

休眠:4.3.7 最终版

春季:4.1.2

【问题讨论】:

    标签: java spring hibernate


    【解决方案1】:

    参考这个问题Difference between @GeneratedValue and @GenericGenerator

    问题可能出在您的@GeneratedValue

    所以你可以改变

    @GeneratedValue(strategy=GenerationType.SEQUENCE)
    

    @GeneratedValue(generator="increment")
    

    注意:您可以参考 this 将您的数据库序列分配给@GeneratedValue

    【讨论】:

    • 您好,感谢您的回复。最初是一样的。我改成这个进行试验和错误。我现在又按照你的建议尝试了,不幸的是它不起作用。
    • 所以 ID 值已正确插入到您的表中?
    • 是的,它已正确插入我的表中。但是返回错误的值
    • 当你说它正确插入时,数据库中的 ID 列值正在递增。该列是表中的主键吗?
    • 是的,是的。你可以在那里看到@Id。它是自动递增的
    【解决方案2】:

    从代码中我看到你的生成策略是序列。但是您错过了将序列映射到注释。

    https://docs.oracle.com/javaee/5/api/javax/persistence/GeneratedValue.html

    @Id
    @GeneratedValue(strategy=GenerationType.SEQUENCE, generator="YOUR_SEQ")
    @Column(name = "ID")
    public Long getId() {
        return id;
    }
    

    否则,如果您使用的是自定义生成器,那么您应该映射如下:

    @Id
    @GeneratedValue(generator= "increment")
    @GenericGenerator(name = "increment", strategy = "increment")
    @Column(name = "ID")
    public Long getId() {
        return id;
    }
    

    【讨论】:

    • 您好,再次感谢您的回复。但它不起作用。
    • 您能否提供更多详细信息,例如:您使用的是什么数据库?您是否使用序列来填充主键。你的交易成功了吗?
    • 是的,我得到了它的工作,问题是 onetoOne 映射。实际上是多对多。这限制了结果。
    猜你喜欢
    • 2021-09-26
    • 1970-01-01
    • 1970-01-01
    • 2020-04-06
    • 1970-01-01
    • 2014-12-28
    • 1970-01-01
    • 2016-11-21
    • 2019-10-10
    相关资源
    最近更新 更多