| id | key | value |
|----|------|-------|
| 1 | test | hello |
| 1 | test | world |
| 2 | test | hello |
| 2 | foo | bar |
| 3 | test | hello |
| 3 | test | world |
select id from test where key = 'test' and value = 'hello'
INTERSECT
select id from test where key = 'test' and value = 'world'
我还没有找到在QueryDSL中声明这种SQL的任何方法。我能够编写两个select语句,但是我仍然无法将它们与intersect
结合起来。
JPAQueryFactory queryFactory = new JPAQueryFactory(em); // em is an EntityManager
QTestEntity qTestEntity = QTestEntity.testEntity;
var q1 = queryFactory.query().from(qTestEntity).select(qTestEntity.id).where(qTestEntity.key("test").and(qTestEntity.value.eq("hello")));
var q2 = queryFactory.query().from(qTestEntity).select(qTestEntity.id).where(qTestEntity.key("test").and(qTestEntity.value.eq("world")));;
最后,我想检索一个与给定查询匹配的ID列表。通常,相交的数量可以是20或30左右,这取决于我要搜索的键/值对的数量。
有没有人知道如何使用QueryDSL执行类似的操作?
test:
| userId | key | value |
|---------|------|-------|
| 1 | test | hello |
| 1 | test | world |
| 2 | test | hello |
| 2 | foo | bar |
| 3 | test | hello |
| 3 | test | world |
user:
| id | name |
|----|----------|
| 1 | John |
| 2 | Anna |
| 3 | Felicita |
@Entity
public class TestEntity {
@Id
@Column(name = "userId", nullable = false)
private String pubmedId;
@Id
@Column(name = "value", nullable = false)
private String value;
@Id
@Column(name = "key", nullable = false)
private String key;
}
@Entity
class User {
@Id
private int id;
private String name;
@ElementCollection
private Set<TestEntity> keyValues;
}
您的TestEntity实际上不是一个实体,因为它的id不是主键,而是用户表的外键。
如果它只能通过使用它的所有属性来识别,那么它就是一个@embeddable,没有任何@id属性。
您可以将Embeddable的集合映射为另一个实体的@ElementCollection部分,该实体以id作为主键。在您的示例中,id列不是Embeddable的属性,它只是主表的外键,因此您将其映射为@JoinColumn:
@Embeddable
public class TestEmbeddable {
@Column(name = "value", nullable = false)
private String value;
@Column(name = "key", nullable = false)
private String key;
}
@Entity
class User {
@Id
private int id;
@ElementCollection
@CollectionTable(
name="test",
joinColumns=@JoinColumn(name="id")
)
private Set<TestEmbeddable> keyValues;
}
user.keyValues.any().in(new TestEmbeddable("test", "hello"))
.and(user.keyValues.keyValues.any().in(new TestEmbeddable("test", "world"))
我是Spring data JPA的新手,正在尝试了解如何最好地将其与QueryDSL一起使用。如果没有QueryDSL,我就可以用@Query注释在SpringData接口中创建任何查询。 为了获得使用QueryDSL的相同体验,根据我所看到的,我需要创建我自己的自定义存储库实现并让我的repo接口扩展我的自定义实现接口,或者将我的所有QueryDSL查询放在包装我的repo的服务层。 在第一种
我使用的是Querydsl 2.9、Spring Data JPA 1.3.0和Hibernate JPA 2 API 1.0版。我试图在两个表和之间进行简单的连接,连接到列。由于某些原因,Hibernate执行的查询中总是有一个额外的。这些表格如下所示: 但是,实际运行的查询是这样的: 请注意结尾处额外的。我意识到,如果在上执行可以得到正确的结果,但我不希望在不需要的情况下增加的额外开销。我尝试
我正在尝试从mysql数据库中检索今天的记录。 和控制器代码: 我希望通过使用findByDate(...)获得今天的记录方法,但似乎不起作用。在查看MysqlWorkbench的数据时,我还注意到一个小问题:日期似乎提前了2小时(例如:现在是11:57,但在mysql workbench软件中显示的是9:57,当我查询服务器时间时,显示的是不正确的tme……)我其实不关心小时/分钟/秒,我只想检
作为一个爱好项目,我目前正在开发一个全堆栈的web应用程序。 我的技术堆栈是: MySql数据库 我已经对数据库进行了建模,并为数据库中的所有表创建了jpa实体。数据模型包括一些双向关系(多对多关系)。然后,我开始为前端创建一些APIendpoint进行交互,但我在决定如何序列化数据并将其发送到前端时遇到了一些问题。 在大多数教程和示例中,与数据库对象直接相似的对象被序列化,然后发送到前端。但我不
我们有Spring Data JPA的功能,我们在其中使用querydsl,如下所示 这是我的实体: 这是我的知识库: 通过上面的代码,我能够实现QueryDSL功能,并根据实体中的任何字段查询实体。 现在,当我们从sql server迁移到Neo4j时,这里是我的实体 这是我的知识库 这些是我的Neo4j应用程序的一些版本和属性 在构建了使用Neo4J的应用程序后,它没有生成QCarEntity
null 类似于REST查询DSL 用于全文和结构化搜索的查询语言