在Java中动态创建变量的新实例

时间:2018-12-13 01:01:27

标签: java hibernate

我有两个需要使用休眠模式执行相同操作的类。

@Entity
@Table(name="users")
class User {

    @Id
    public int id;

    String user;
    //etc...
}


@Entity
@Table(name="groups")
class Group {

    @Id
    public int id;

    String group_name;
    //etc...
}

我有一个休眠类来保存数据

public Hibernate {

    public static void save(User user) {
        Session session = ... opne my session
        Transaction tx = session.beginTransaction();

        // save
        session.save(user);

        tx.commit();
        session.close();

    }
}

现在我想保存组,但是我想使用相同的功能,但是我无法通过组

我试图通过

public static void save(Class myClass) {

但随后出现一些错误如何动态传递类以使其正常工作?

所以我的代码将是:

  

User user = new User().... Hibernate.save(user); //这将保存一个   用户表中的用户

     

Group group = new Group().... Hibernate.save(group); //这将保存   组表中的一个组

2 个答案:

答案 0 :(得分:0)

首先,有许多用于数据库访问的“标准”模式。例如,“ DAO”-数据访问对象以及“存储库”(在Spring中)。但是,如果选择改为使用带有静态方法的实用程序类(不建议使用),则可以创建第二个save()方法,第二个方法将使用Group的实例(Java中标准方法名称重载) ),或者您可以让UserGroup类都从您实体的某个公共基类继承,然后使用一个save()方法来获取该公共基类的实例。

答案 1 :(得分:0)

您不是只需要将public static void save(User user)替换为public static void save(Object object)

旁注:

此外,如果您不想让每个对象都保留下来,则可以使您的实体实现标记器接口,并在save的形式参数中接收该接口。

类似这样的东西:

@Override
public <T extends Base> T find(Class<T> baseClass, Long id) {
    if (baseClass == null || id == null) {
        throw new DaoLevelException("Entity class or id cannot be null");
    }
    // code for finding with id
}

@Override
public void save(Base base) {
    if (base == null) {
        throw new DaoLevelException("object passed for saving cannot be null");
    }
    // code for persist 
}