java - 自动持久化一个复杂的 Java 对象

标签 java sql hibernate persistence

对于我正在从事的项目,我需要将一些 POJO 保存到数据库中。 POJOs 类定义有时是高度嵌套的,但它们应该是扁平的,因为嵌套是树状的并且不包含循环(并且基本元素最终是基元/字符串)。最好使用的解决方案为每种数据类型创建一个表,并且这些表将具有 POJO 中每个原始成员的一个字段。子类化和类似问题不是这个特定项目的问题。

有没有人知道任何现有的解决方案可以:

  1. 根据类定义自动生成CREATE TABLE定义
  2. 在给定对象实例的情况下,自动生成查询以将对象持久保存到数据库
  3. 自动生成查询以从数据库中检索对象,并在给定键的情况下将其作为 POJO 返回。

可以通过对类文件进行最少的修改/注释和最少的外部配置来实现此目的的解决方案是首选。


例子:

Java 类

//Class to be persisted
class TypeA {
  String guid;
  long timestamp;
  TypeB data1;
  TypeC data2;
}

class TypeB {
  int id;
  int someData;
}

class TypeC {
  int id;
  int otherData;
}

可以映射到

CREATE TABLE TypeA (
  guid CHAR(255),
  timestamp BIGINT,
  data1_id INT,
  data1_someData INT,
  data2_id INt,
  data2_otherData INT
);

或类似的东西。

最佳答案

我会使用标准化 Java Persistence API (JPA),最好带有注释。关于您的要求:

  1. 这不是规范所要求的,但大多数 JPA 提供程序(所有主要实现都支持)支持从映射元数据生成 DDL。
  2. EntityManager#persist(Object entity) 这样做。
  3. <T> T EntityManager#find(Class<T> entityClass, Object primaryKey) 这样做。

正如提示的那样,JPA 是一个 API,您需要一个实现才能使用它。我喜欢 Hibernate Entity ManagerEclipseLink (参见 this previous question)。

关于java - 自动持久化一个复杂的 Java 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3008676/

相关文章:

Java Finalize 方法不调用

java - 严重 : java. lang.NullPointerException GAE + PrimeFaces + Spring + Maven,BookList 应用程序

sql - 雪花json横向子查询

sql - PostgreSQL 中的 PL/pgSQL 和 SQL 是否都与 SQL/PSM 标准处于同一级别,而不是仅作为 SQL 标准?

mysql - 按组划分的数据异常值

java - 从数据库映射文件和 POJOS for postgres 不工作

mysql - Play 2.3 JPA Hibernate MySQL 池/连接错误

java - 如何将掩码设置为 SWT 文本以仅允许小数

java - 信息 : Transport Used for JDBC connection: null + Apache Hive

java - 如何从 Spring/JPA/Hibernate 中的嵌套实体获取对象?