java - 使用 JOOQ 读取标记对象的推荐方法是什么?

标签 java sql jooq

为了给数据库中的对象添加标签,似乎有以下方案是一种常见的方法:

实体有一些属性和很多可以添加到它们的标签。 假设有三个表:

具有列 ID 和 NAME(以及一些其他值)的表元素,
包含列 TAGID 和 TAGNAME 以及
的表标签 具有 TAGID 和 ELEMENTID 的表 TagsToElement,它将标签分配给元素。

我想知道,这是从数据库中读取分配了特定标签的元素的好方法。我的意思是,Jooq 的条件看起来如何只过滤掉分配了特定标签的元素。

这是否可能只对数据库进行一次访问?

问候

迈克

最佳答案

与往常一样jOOQ ,您应该首先问自己的问题是:“我将如何用 SQL 编写它?”。在 SQL 中,你会写

SELECT *
FROM   Element
WHERE  EXISTS (
  SELECT 1
  FROM   Tags
  JOIN   TagsToElement
  ON     Tags.TAGID = TagsToElement.TAGID
  WHERE  Element.ID = TagsToElement.ELEMENTID
  AND    Tags.TAGNAME = 'Specific Name'
)

将上面1:1翻译成jOOQ:

// import static org.jooq.impl.DSL.*; is assumed
DSL.using(configuration)
   .selectFrom(Element)
   .whereExists(
      selectOne()
     .from(Tags)
     .join(TagsToElement)
     .on(Tags.TAGID.eq(TagsToElement.TAGID))
     .where(Element.ID.eq(TagsToElement.ELEMENTID))
     .and(Tags.TAGNAME.eq("Specific Name"))
   )

显然,您也可以使用 IN 谓词而不是 EXISTS 谓词来表达半连接。

关于java - 使用 JOOQ 读取标记对象的推荐方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18575620/

相关文章:

java - 如何将数组中的元素放置在给定位置?

java - Servlet写入文件末尾包含二进制文件

mysql - 在 SQL 中对两行求和(同一表中的前一行和当前行)

java - JOOQ json 绑定(bind)问题

Java8 : How to get the internal Type of java. util.Optional 类?

java - 在 Java 中下载文件时的合理缓冲区大小

java - 存储查询中的计数值

sql - 有没有办法在Sql Server CE中将 'datetime'格式转换为 'timestamp'?

postgresql - 使用 JOOQ 在 PostgreSQL 中查找以秒为单位的时间戳之间的差异

java - 有没有办法在JOOQ中查询ltree?