Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/399.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 插入数据库的最佳方法?_Java_Database_Hibernate_Design Patterns - Fatal编程技术网

Java 插入数据库的最佳方法?

Java 插入数据库的最佳方法?,java,database,hibernate,design-patterns,Java,Database,Hibernate,Design Patterns,我有一个需求,我需要从对象中插入到数据库中,该对象包含关于表名和每个列的值的信息。 你能不能给我一些建议,说明用Hibernate实现这一点的最佳方法 Java类 public class InsertDataDetails { public String tableName; public List ColumnDetails> columnDetails; } public class ColumnDetails { public String columnName;

我有一个需求,我需要从对象中插入到数据库中,该对象包含关于表名和每个列的值的信息。 你能不能给我一些建议,说明用Hibernate实现这一点的最佳方法

Java类

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

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

目前,我正在考虑创建一个本机查询,并使用Session.executequery执行它。然而,我正在寻找更好的设计,在那里我们可以使用DTO类和hibernate特性。

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

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

我还建议您阅读Martin Fowler的著作,了解持久性问题通常是如何用对象来解决的

谷歌的数据访问对象。下面是一个简单的通用示例,它很容易通过Hibernate和extend实现:

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);
}
包持久化;
公共接口通用DAO{
V find(K id);
列表查找();
K插入(V值);
无效更新(V值);
无效删除(V值);
}

关于对象的持久性问题已经解决了很多次,而且已经尽了最大的努力。您的建议并不代表对现有技术的有意义的改进。

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

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

我还建议您阅读Martin Fowler的著作,了解持久性问题通常是如何用对象来解决的

谷歌的数据访问对象。下面是一个简单的通用示例,它很容易通过Hibernate和extend实现:

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);
}
包持久化;
公共接口通用DAO{
V find(K id);
列表查找();
K插入(V值);
无效更新(V值);
无效删除(V值);
}

关于对象的持久性问题已经解决了很多次,而且已经尽了最大的努力。你提出的建议并不代表对最新技术的有意义的改进。

虽然你的问题没有提到春天,但我认为值得提出这个项目

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

例如:

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

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

虽然你的问题没有提到Spring,但我认为值得提出这个项目

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

例如:

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

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

你文章的最后一段似乎过于苛刻,不符合堆栈溢出的精神。谢谢你的回复。我们已经为您提到的类似接口提供了一个实现类。问题是如何从InsertDataDetails类创建DTO对象();使用你的模型类。你文章的最后一段似乎过于苛刻,不符合堆栈溢出的精神。谢谢你的回复。我们已经为您提到的类似接口提供了一个实现类。问题是如何从InsertDataDetails类创建DTO对象();只需使用您的模型类即可。+1用于推荐Spring。这是一个很好的主意,但我敢打赌这肯定超出了计划的范围。谢谢你的建议。我们也在使用Spring,并且还有一个类似于您提到的实现类。请您解释一下“围绕它们所表示的对象而不是它们的持久性来建模您的类”。+1推荐Spring。这是一个很好的主意,但我敢打赌这肯定超出了计划的范围。谢谢你的建议。我们也在使用Spring,并且还有一个类似于您提到的实现类。请您解释一下“围绕类所表示的对象而不是它们的持久性来建模类”。