Java Hibernate session.save()始终返回1

Java Hibernate session.save()始终返回1,java,spring,hibernate,Java,Spring,Hibernate,我在session.save()中得到一个奇怪的结果。它总是返回1。但数据库中的值插入正确。如有疑问,请提出建议 代码 session = getSessionFactory().openSession(); Transaction transaction = session.beginTransaction(); userId = (Long)session.save(user); transaction.commit(); @Id @GeneratedValue(strategy=Gene

我在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;
}
用户-持久性

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

指的是这个问题

问题可能出在您的
@GeneratedValue

所以你可以改变

@GeneratedValue(strategy=GenerationType.SEQUENCE)


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

从代码中我看到您的生成策略是序列。但是您没有将序列映射到注释

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

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

嗨,谢谢你的回复。起初是一样的。为了反复试验,我更改了此选项。我现在再次按照您的建议进行了尝试,不幸的是,它不起作用。因此ID值正确地插入到了您的表中?是的,它正确地插入到了我的表中。但当您说正确插入时返回的值是错误的,数据库中的ID列值是递增的。该列是表中的主键吗?是的,是。你可以在那里看到@Id。这是自动递增的。再次感谢您的回复。但是它不工作。你能给我一些更多的细节吗,比如:你在用什么数据库?是否使用序列填充主键。你的交易成功了吗?是的,我成功了,问题是OneTONE映射。事实上有很多。这限制了结果。