为了给数据库中的对象添加标签,似乎有以下方案是一种常见的方法:
实体有一些属性和很多可以添加到它们的标签。 假设有三个表:
具有列 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/