Hibernate使用一个Dao函数保存多个对象

时间:2018-02-02 10:37:20

标签: java spring hibernate

我有三个bean类:UsersUserDetailAuth我正在服务类

@Override
public void addUser(UserDetail userDetail) {
  Users users=new Users();
  users.setUsername(userDetail.getUsername());
  users.setEnabled(userDetail.isEnabled());
  users.setAgentId(userDetail.getAgentId());

  Auth auth = new Auth();
  auth.setUsername(userDetail.getUsername());
  auth.setAuthority(userDetail.getAuthority());

  userDetailDao.addUser(userDetail, users, auth);
}

我希望将这些所有对象保存在Dao类中,如

  @Override
public void addUser(UserDetail userDetail,Users users,Auth auth)
{
  // TODO Auto-generated method stub
  getSession().saveOrUpdate(userDetail);
  //Here i also want to save 'users' and 'auth' in same transaction..
  getSession().flush();
}

可以解决你可以尝试...谢谢。

3 个答案:

答案 0 :(得分:0)

如果您将UserDetail类重构为以下内容:

public final class UserDetail
{
    private Users user;
    private Auth auth;

    // Getter and Setter
}

您可以继续在数据库中通过Hibernate存储UserDetail对象。

当然,您需要将所需的注释添加到UserDetail类。

另外,不要重建UserDetail,而是创建一个新的类来存储这两个对象,比如UserDetailDO或UserDetailPersistence,或者你可以自己想出一些更好的名字。

请注意正确设置关系的注释,例如OneToOne或OneToMany。

答案 1 :(得分:0)

在您的情况下,UserDetail类引用成员用于Users和Auth类,并且可以基于UserDetail类或Users类的主键进行映射。

因此,您可以根据UserDetail类的主键参考重新定义这些辅助类(Users和Auth),而不是每次都创建对象。

注意外键引用的注释。

这样做的另一种方法是在类中定义基本详细信息并将该类扩展到辅助类。但是大多数情况都不适用于这种方法,因为反复创建对象可能具有应用程序性能。

答案 2 :(得分:0)

问题是在DAO中管理您的交易,最好的方法是您的业务层管理交易。

像这样:

class BO {

    doSomething() {
        DaoA daoA = new DaoA();
        DaoB daoB = new DaoB();
        transaction.begin();
        daoA.insert();
        daoB.insert();
        transaction.commit();
    }

}

也看到这篇文章: Where should "@Transactional" be place Service Layer or DAO