1

我有一个要求,我需要从对象中插入数据库,该对象包含有关每列的表名和值的信息。您能否就使用 Hibernate 实现此功能的最佳方式提出建议。

Java 类

public class InsertDataDetails {
  public String tableName;
  public List ColumnDetails> columnDetails;
}

public class ColumnDetails {
  public String columnName;
  public String columnValue;
}

目前我正在考虑创建一个本机查询并使用 Session.execute 查询执行它。但是我正在寻找更好的设计,我们可以在其中使用 DTO 类和休眠功能。

4

2 回答 2

1

尽管您的问题没有提到 Spring,但我认为值得一提的是Spring Data项目。

这为您提供了非常强大的持久性存储库,除了声明接口之外不需要任何实现。

例如:

 public interface UserRepository extends JpaRepository<User,Long> {}

为您提供一个完全工作的类似 DAO 的对象,for Users,其方法如下:

List<User> findAll();
User findOne(Long id);
User save(User entity);

但是,为了使用它,您需要遵循@Duffymo 的建议,并围绕它们所代表的对象而不是它们的持久性来建模您的类。

于 2012-11-25T21:32:54.600 回答
0

所有这些建议都过于以关系为中心和过于简单化。我建议您放弃这种方法。

您应该根据您要解决的问题而不是持久性来考虑对象。如果您想使用 Hibernate,它可以将问题的 OO 表示映射到关系模式。

我还建议您阅读 Martin Fowler 的企业应用程序架构模式,以了解持久性问题通常如何根据对象来解决。

谷歌数据访问对象。这是一个简单的通用的,很容易用 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);
}

对象的持久性已经解决了很多次,尽其所能。您提出的建议并不代表对现有技术的有意义的改进。

于 2012-11-25T20:40:54.103 回答