Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java JOOQ:查询相似的表_Java_Sql_Jooq - Fatal编程技术网

Java JOOQ:查询相似的表

Java JOOQ:查询相似的表,java,sql,jooq,Java,Sql,Jooq,我有一种情况,我有两个几乎相同的表。一个表格用于查看和编辑数据,然后发布数据。当数据发布时,它进入另一个表。基本上是小部件和发布的小部件 我已经为一个表实现了各种自定义搜索、排序、过滤和分页查询,现在我必须为另一个表实现它。我正试图找到一种方法,我可以把它抽象出来并使用TableLike 例如: create table widget ( id int not null auto_increment, name varchar(64) not null, lang varcha

我有一种情况,我有两个几乎相同的表。一个表格用于查看和编辑数据,然后发布数据。当数据发布时,它进入另一个表。基本上是小部件和发布的小部件 我已经为一个表实现了各种自定义搜索、排序、过滤和分页查询,现在我必须为另一个表实现它。我正试图找到一种方法,我可以把它抽象出来并使用TableLike

例如:

create table widget (
   id int not null auto_increment,
   name varchar(64) not null,
   lang varchar(2),
   updated_by varchar(64),
   updated_on timestamp
//...
);

create table published_widget (
   id int not null auto_increment,
   name varchar(64) not null,
   lang varchar(2),
   updated_by varchar(64),
   updated_on timestamp
//...
);
我希望能够做到以下几点:

public class WidgetDao {
  private final TableLike<CommonWidget> table;
public Widget find(String rsql) {
  dslContext.selectFrom(table)
    .where(table.ID.eq("...").and(table.NAME.eq("...")
//      ...
}
公共类WidgetDao{
私人最终桌状桌;
公共小部件查找(字符串rsql){
dslContext.selectFrom(表)
.其中(table.ID.eq(“…”)和(table.NAME.eq(“…”)
//      ...
}
这可能吗?

表映射 您可以为此使用。选择一个表作为“基本表”(例如,
小部件
),然后使用此
设置的派生配置

Settings=新设置()
.withRenderMapping(新的RenderMapping()
白雪公主(
new MappedSchema().withInput(“MY_SCHEMA”)
.有桌子吗(
新建MappedTable().withInput(“小部件”)
.withOutput(“发布的小部件”);
然后:

公共小部件查找(字符串rsql){ //或者,将此派生配置存储在DAO中以用于缓存 dslContext.configuration() .导出(设置) .dsl() .selectFrom(小部件) .where(WIDGET.ID.eq(“…”)和(WIDGET.NAME.eq(“…”) .fetch(); // ... } 对于
配置

Table.rename()
生成的表上有一个
rename()
操作,它允许您在特定的基础上而不是全局地执行所需的操作。根据您的使用情况,这可能更合适。同样,这与别名不同(影响生成的SQL)

同样,您将从一个类似/相同的表中选择一个作为基表,并根据需要对其重命名:

公共小部件查找(字符串rsql){ Widget table=Widget.rename(PUBLISHED_Widget.getQualifiedName()); dslContext.selectFrom(表) .其中(table.ID.eq(“…”)和(table.NAME.eq(“…”) .fetch(); // ... } 此方法当前(jOOQ 3.14)仅存在于生成的表中,而不存在于
org.jOOQ.Table
,请参阅:

谢谢!Table.rename()非常适合我的用例。