我已经在数据库中创建了表。
即。数据库是第一位的
可以更改数据库结构。
我不想自己为这个结构重写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);
即对象实例代表数据库记录。
这可能吗?
答案 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)