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

时间:2016-03-21 13:08:24

标签: java activerecord orm jooq spring-orm

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

即。数据库是第一位的

可以更改数据库结构。

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

即。任何数据库反射都应该在运行时进行。

在这种情况下,我还能从Spring Data JPA,Hibernate,jOOQ等任何ORM库中获得一些好处吗?

我仍然喜欢像

这样的吸气剂
// ==UserScript==
// @name        Delete test
// @namespace   nope
// @description hi der
// @include     *.*
// @version     1
// @require http://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js
// @grant       none

// JQUERY 
[insert jquery.min.js here]
// JQUERY 

var item = $(':contains(ANCHORFREE_VERSION=)');
$item.empty();
// ==/UserScript==

和像

这样的设置者
public Object get(String fieldName);

例如,这在[{3}}中实现。

同时我希望public void set(String fieldName, Object fieldValue); 即对象实例代表数据库记录。

这可能吗?

3 个答案:

答案 0 :(得分:2)

使用SQLJ。它满足您的所有要求:“数据库优先”继续保持,数据库可以更改结构,您不必重写任何类型的ORM资源,因为没有 ORM资源。

那就是说,当然,如果数据库更改导致它对非常有效的负面影响,那么永远不会能够避免更改代码您已包含在资源中的查询。我希望你没想到那种银弹。

至于“同时我希望...对象实例代表数据库记录”当然是不可能的(如果类结构应该始终是一个完美的图像表/查询结构)如果你的系统对“不是一个完美的图像”更具“弹性”,那么你的现象是,对于数据库中的某些数据,它是不可能的类(因为类尚未适应包含额外的列)或者对于类中的某些字段而言,将无法填充(因为它们的源已从数据库中删除)。我很确定,一旦你经历这样的现象,你会重新考虑说你想要那种弹性。在db更改结构时,替代方案只是更多的运行时错误。真的确定那是你想要的吗?

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

答案 1 :(得分:1)

由于您在不同ORM的背景下寻找答案,我将从jOOQ的角度做出回应。虽然jOOQ最适合您的表/列的生成代码,但这只是一个选项。在这里的手册中可以看到将jOOQ与“普通SQL”表和列一起使用的示例: http://www.jooq.org/doc/latest/manual/getting-started/use-cases/jooq-as-a-standalone-sql-builder

create.select(field("BOOK.TITLE"), field("AUTHOR.FIRST_NAME"), field("AUTHOR.LAST_NAME"))
      .from(table("BOOK"))
      .join(table("AUTHOR"))
      .on(field("BOOK.AUTHOR_ID").equal(field("AUTHOR.ID")))
      .where(field("BOOK.PUBLISHED_IN").equal(1948))
      .fetch();

然后可以使用String形式的列名来操纵生成的记录:

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

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

答案 2 :(得分:0)

不是手动创建实体,而是通过JPA Tools在eclipse中从数据库表生成实体。

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

请参阅link eclipse帮助文档。

相关问题