我正在与用户一起制作一个应用程序。用户有一个id,该id使用以下Hibernate注释自动分配:
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id
这一切都很好,但问题是,每次我运行应用程序(同时添加同一个用户)时,它都会为用户分配一个新id,而不管该用户是否已经存在。
我该怎么做才能使现有用户在每次运行应用程序时都不会获得新id,而不必要求所有用户单独检查他们的用户名?
提前谢谢。
编辑
更多的一些代码示例(这里我只写相关的代码)。
用户:
@Entity
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String username;
// more code here
}
带有save函数的用户hibernate类:(会话在Main中打开并提供给构造函数)。
public class UserDAOHibernate implements GebruikerDAO {
private Session session;
public UserDAOHibernate(Session session) {
this.session = session;
}
@Override
public boolean save(User user) {
try {
if (this.findById(user.getId()) == null) {
Transaction transaction = session.beginTransaction();
session.save(user);
transaction.commit();
return true;
}
} catch (Exception e) {
e.printStackTrace();
}
return false;
}
// more code here
}
上面的代码中,我根据id检查用户是否已经存在,因为用户不断获得新的id,所以这个函数检查是否存在id=2的用户,而已经存在的用户id=1。
在主:
// lots of code
User user = new User("Stijuh");
// more code here
UserDAOHibernate udao = new UserDAOHibernate(session);
udao.save(user);
如果要更新,在保存对象之前,必须设置id字段。这样Hibernate就不会生成新的
我有两个实体,我想保存到数据库中,付款和付款项。付款可以有更多的付款项目。 主要实体: 第二个实体: 所以,我用1个PaymentItem填充一个Payment,并尝试保存它。请注意,Payment没有自动生成的ID,我从其他地方获取ID并手动设置。 现在,当我试图保存它时,Hibernate会转到数据库,查看是否存在一个现有条目及其项(不是,数据库是空的)。 我知道这一点,因为我打开了Hiber
我想保存一个学生,一个学生有一个TargetAudience对象作为属性。这些目标受众都已经在我的数据库中硬编码好了。(targetaudience=校园专业)。现在当我这样发帖时: 它不起作用,因为每次它为校园创建一个新对象,并且因为我使用名称作为主键,它都会抛出一个异常。spring data jpa不应该查看实体allready是否存在,然后使用它吗?或者我该怎么做? 抱歉我没说清楚这是我第
我试图创建一个注册用户的功能。 我遵循了这篇文章中的建议:将空作为id保存,并Hibernate,但解决方案对我不起作用。这是我的用户类 这是我的账户类 我的日志显示了以下输出
子类: 我将它保存在我的DAO中,如下所示: 当我试图保存对象ship,它会给我以下错误:
我想保存两个实体的差异。旧实体有一个id女巫不是空的。新的id值为null,所以我将它们作为ValueObject进行比较。问题是ValueChange确实保存了差异,但没有保存旧的id。ich如何做到这一点?
我是Hibernate的新手,并要求使用具有这些列的表的数据库 表:TBL _ product//库存项目列表< br >列:< br > key _ product < br > key _ category < br > fld _ product _ name < br > fld _ Inventory _ qty < br > fld _ unit _ price < br > fld