Java中有没有没有没有硬编码表结构的ORM?

Java中有没有没有没有硬编码表结构的ORM?,java,activerecord,orm,jooq,spring-orm,Java,Activerecord,Orm,Jooq,Spring Orm,我已经在数据库中创建了表 即数据库是第一位的 可以更改数据库结构 我不想自己为这个结构重写ORM字段。我不想使用任何工具(如Hibernate或JPA工具)重新生成任何映射 即,应在运行时进行任何数据库反射 在这种情况下,我还能从SpringDataJPA、Hibernate、jOOQ等ORM库中获得一些好处吗 我还是更喜欢像这样的人 public Object get(String fieldName); public void set(String fieldName, Object fi

我已经在数据库中创建了表

即数据库是第一位的

可以更改数据库结构

我不想自己为这个结构重写ORM字段。我不想使用任何工具(如Hibernate或JPA工具)重新生成任何映射

即,应在运行时进行任何数据库反射

在这种情况下,我还能从SpringDataJPA、Hibernate、jOOQ等ORM库中获得一些好处吗

我还是更喜欢像这样的人

public Object get(String fieldName);
public void set(String fieldName, Object fieldValue);
二传手喜欢

public Object get(String fieldName);
public void set(String fieldName, Object fieldValue);
例如,这是在中实现的

同时,我希望有
活动记录
,即对象实例表示数据库记录


这可能吗?

有一种方法可以通过JPA工具从eclipse中的数据库表生成实体,而不是手动创建实体

之后,您也可以将这些实体类用于spring数据


请参阅eclipse帮助文档

既然您在不同的ORM环境中寻找答案,我将从jOOQ的角度进行回应。虽然jOOQ最适合为表/列生成代码,但这只是一个选项。在以下手册中可以看到将jOOQ与“普通SQL”表和列一起使用的示例:

然后,可以使用
String
格式中的列名来操作生成的记录:

Object value = record.getValue("TITLE");

(免责声明:我为jOOQ背后的公司工作)

使用SQLJ。它满足了您的所有需求:“数据库优先”仍然有效,数据库可以改变结构,并且您不必重写任何类型的ORM资源,因为没有ORM资源

也就是说,如果数据库的更改对源代码中包含的查询的有效性产生负面影响,那么当然您永远无法避免代码的更改。我希望你没想到会有那样的银弹

至于“同时我希望……对象实例表示数据库记录”,当然这是不可能的(如果类结构一直被认为是表/查询结构的完美映像),并且如果您的系统“更具弹性”以“不是完美映像”然后会出现这样的现象:对于数据库中的某些数据,不可能将其添加到类中(因为类没有被修改为包含附加列),或者对于类中的某些字段,不可能填充(因为它们的源已从数据库中删除)。我敢肯定,一旦你经历过这样的现象,你会重新考虑说你想要那种韧性。另一种选择是,只要数据库改变了结构,就会出现更多的运行时错误。真的确定那就是你想要的吗


真的。你的问题听起来很像“我想要工作程序,但我不想编码”。

你说的“在Java中没有硬编码表结构”是什么意思?您不想使用任何批注?仅可选。如果我愿意,我会声明一个属性并对其进行注释。但如果不是,我应该能够有动态属性。从数据库读取的任何记录都应该包含所有字段,动态getter可以访问这些字段。“动态属性”,“动态getter”?您不会对记录使用标准POJO类?因为我不想在每次数据库结构更改时重构它们。假设我添加了新字段或重命名了旧字段。我不想重构和重新编译我的应用程序。