我有一个要求,我需要从对象插入数据库,该对象具有关于每个列的表名和值的信息。 您能否就Hibernate实现这一目标的最佳方式提出建议。
Java类
public class InsertDataDetails {
public String tableName;
public List ColumnDetails> columnDetails;
}
public class ColumnDetails {
public String columnName;
public String columnValue;
}
目前我正在考虑创建一个本机查询并使用Session.execute查询执行它。但是我正在寻找更好的设计,我们可以使用DTO类和休眠功能。
答案 0 :(得分:1)
虽然你的问题没有提到Spring,但我认为值得提出Spring Data项目。
这为您提供了非常强大的持久性存储库,除了声明接口之外无需任何实现。
例如:
public interface UserRepository extends JpaRepository<User,Long> {}
为User
s提供了一个完全正常工作的DAO对象,其方法如下:
List<User> findAll();
User findOne(Long id);
User save(User entity);
然而,为了使用它,你需要遵循@Duffymo的建议,并围绕它们所代表的对象建模你的类,而不是它们的持久性。
答案 1 :(得分:0)
所有这些提案都过于以关系为中心而且过于简单化。我建议你放弃这种做法。
您应该根据您尝试解决的问题考虑对象,而不是持久性。如果要使用Hibernate,它可以将问题的OO表示映射到关系模式。
我还建议您阅读Martin Fowler的Patterns of Enterprise Application Architecture,了解如何通过对象来解决持久性问题。
Google for Data Access Object。这是一个简单的通用的,易于使用Hibernate实现并扩展:
package persistence;
public interface GenericDao<K, V> {
V find(K id);
List<V> find();
K insert(V value);
void update(V value);
void delete(V value);
}
对象的持久性已经多次解决,尽可能最好。你提出的建议并不代表对现有技术水平的有意义的改进。