自动保留复杂的Java对象

Vee*_*Arr 1 java sql persistence hibernate

对于我正在进行的项目,我需要将一些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;
}
Run Code Online (Sandbox Code Playgroud)

可以映射到

CREATE TABLE TypeA (
  guid CHAR(255),
  timestamp BIGINT,
  data1_id INT,
  data1_someData INT,
  data2_id INt,
  data2_otherData INT
);
Run Code Online (Sandbox Code Playgroud)

或类似的东西.

Pas*_*ent 5

我会使用标准化的 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(参见前一个问题).