对于我正在从事的项目,我需要将一些 POJO 保存到数据库中。 POJOs 类定义有时是高度嵌套的,但它们应该是扁平的,因为嵌套是树状的并且不包含循环(并且基本元素最终是基元/字符串)。最好使用的解决方案为每种数据类型创建一个表,并且这些表将具有 POJO 中每个原始成员的一个字段。子类化和类似问题不是这个特定项目的问题。
有没有人知道任何现有的解决方案可以:
- 根据类定义自动生成
CREATE TABLE
定义 - 在给定对象实例的情况下,自动生成查询以将对象持久保存到数据库
- 自动生成查询以从数据库中检索对象,并在给定键的情况下将其作为 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),最好带有注释。关于您的要求:
- 这不是规范所要求的,但大多数 JPA 提供程序(所有主要实现都支持)支持从映射元数据生成 DDL。
-
EntityManager#persist(Object entity)
这样做。 -
<T> T EntityManager#find(Class<T> entityClass, Object primaryKey)
这样做。
正如提示的那样,JPA 是一个 API,您需要一个实现才能使用它。我喜欢 Hibernate Entity Manager或 EclipseLink (参见 this previous question)。
关于java - 自动持久化一个复杂的 Java 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3008676/