在JOOQ生成器中禁用关系生成会产生什么后果?

时间:2015-10-22 11:26:01

标签: java sql code-generation jooq

我可以通过设置以下configuration options来禁用JOOQ生成器中的标识,外键和唯一密钥生成:

<generate>
  <!-- Primary key / foreign key relations should be generated and used.
       This is a prerequisite for various advanced features.
       Defaults to true -->
  <relations>false</relations>

尽管元模型中没有FK / UK信息,但是禁用这一代的后果究竟是什么? JOOQ本身的哪些功能取决于这些信息?

1 个答案:

答案 0 :(得分:1)

基本上,您无法使用手册关于CRUD的部分中记录的大部分功能:

http://www.jooq.org/doc/latest/manual/sql-execution/crud-with-updatablerecords/

主键

如果不了解主键,则没有UpdatableRecord。即,你将无法写出如下内容:

// This works:
MyTableRecord record =
DSL.using(configuration)
   .selectFrom(MY_TABLE)
   .where(MY_TABLE.ID.eq(1))
   .fetchOne();

// These won't work:
record.store();
record.update();
record.refresh();
record.delete();

// This will still work:
record.insert();

外键

外键信息目前仅在jOOQ中的几个地方使用,其中包括navigation methods

BookRecord book = DSL.using(configuration)
                     .selectFrom(BOOK).where(BOOK.ID.eq(1)).fetchOne();

// This won't work
AuthorRecord author = book.fetchParent(FK_BOOK_AUTHOR);

还有计划增强代码生成器以生成这样的导航方法(#4210),这意味着以下方法无法工作:

// This won't work
AuthorRecord author = book.fetchFkBookAuthor();

或者,合成JOIN ON KEY子句:

DSL.using(configuration)
   .select()
   .from(AUTHOR)
   .join(BOOK).onKey()
   .fetch();

将来会有其他功能取决于约束信息的可用性,但普通的SQL语句不会受到影响。