我有两个需要使用休眠模式执行相同操作的类。
@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); //这将保存 组表中的一个组
答案 0 :(得分:0)
首先,有许多用于数据库访问的“标准”模式。例如,“ DAO”-数据访问对象以及“存储库”(在Spring中)。但是,如果选择改为使用带有静态方法的实用程序类(不建议使用),则可以创建第二个save()
方法,第二个方法将使用Group
的实例(Java中标准方法名称重载) ),或者您可以让User
和Group
类都从您实体的某个公共基类继承,然后使用一个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
}