querydsl: java.lang.NoSuchFieldError: TREATED_PATH
querydsl: java.lang.NoSuchFieldError: TREATED_PATH
springboot版本为2.51,
java 版本 1.8
它会在 selectFrom() 中崩溃,
错误信息:java.lang.NoSuchFieldError:TREATED_PATH
怎么解决,网上找不到办法
有我的代码
@SpringBootTest
class Demo4ApplicationTests {
@Resource
private BmsPostRepository bm;
@Autowired
private JPAQueryFactory queryFactory;
@Test
void contextLoads() {
var tab="hot";
var page = PageRequest.of(pageNo, pageSize);
var t = QBmsPost.bmsPost;
var u = QUmsUser.umsUser;
var now = new Date();
var tomorrow = DateUtils.addDays(now, 1);
var query = queryFactory
.selectFrom(t)
.leftJoin(u)
.on(t.userId.eq(u.id));
if (tab.equals("hot")) query = query.where(t.createTime.lt(tomorrow));
var re = (!tab.equals("hot")) ?
query.orderBy(t.createTime.desc()) :
query.orderBy(t.view.desc(), t.createTime.desc());
var er =re.fetch();
}
}
有依赖性
<dependency>
<scope>compile</scope>
<groupId>com.querydsl</groupId>
<artifactId>querydsl-jpa</artifactId>
<version>5.0.0.M1</version>
</dependency>
<dependency>
<scope>provided</scope>
<groupId>com.querydsl</groupId>
<artifactId>querydsl-apt</artifactId>
<version>5.0.0.M1</version>
</dependency>
java.lang.NoSuchFieldError: TREATED_PATH
at com.querydsl.jpa.JPQLTemplates.<init>(JPQLTemplates.java:147)
at com.querydsl.jpa.JPQLTemplates.<init>(JPQLTemplates.java:51)
at com.querydsl.jpa.JPQLTemplates.<clinit>(JPQLTemplates.java:46)
at com.querydsl.jpa.impl.JPAProvider.<clinit>(JPAProvider.java:59)
at com.querydsl.jpa.impl.JPAQuery.<init>(JPAQuery.java:48)
at com.querydsl.jpa.impl.JPAQueryFactory.query(JPAQueryFactory.java:138)
at com.querydsl.jpa.impl.JPAQueryFactory.select(JPAQueryFactory.java:72)
at com.querydsl.jpa.impl.JPAQueryFactory.selectFrom(JPAQueryFactory.java:102)
at com.example.demo.Demo4ApplicationTests.contextLoads(Demo4ApplicationTests.java:31
BmsPost.java
您有混合版本的 querydsl。我猜您使用的是 querydsl-core 版本 4.4.x,而您的 querydsl-jpa 是版本 5.0.0.M1。
(这可能是由 spring-boot 启动库引起的。)
无论如何,这可以通过明确添加正确版本的 querydsl-core 作为依赖项轻松解决。
<dependency>
<groupId>com.querydsl</groupId>
<artifactId>querydsl-core</artifactId>
<version>5.0.0.M1</version>
</dependency>
springboot版本为2.51, java 版本 1.8 它会在 selectFrom() 中崩溃, 错误信息:java.lang.NoSuchFieldError:TREATED_PATH
怎么解决,网上找不到办法
有我的代码
@SpringBootTest
class Demo4ApplicationTests {
@Resource
private BmsPostRepository bm;
@Autowired
private JPAQueryFactory queryFactory;
@Test
void contextLoads() {
var tab="hot";
var page = PageRequest.of(pageNo, pageSize);
var t = QBmsPost.bmsPost;
var u = QUmsUser.umsUser;
var now = new Date();
var tomorrow = DateUtils.addDays(now, 1);
var query = queryFactory
.selectFrom(t)
.leftJoin(u)
.on(t.userId.eq(u.id));
if (tab.equals("hot")) query = query.where(t.createTime.lt(tomorrow));
var re = (!tab.equals("hot")) ?
query.orderBy(t.createTime.desc()) :
query.orderBy(t.view.desc(), t.createTime.desc());
var er =re.fetch();
}
}
有依赖性
<dependency>
<scope>compile</scope>
<groupId>com.querydsl</groupId>
<artifactId>querydsl-jpa</artifactId>
<version>5.0.0.M1</version>
</dependency>
<dependency>
<scope>provided</scope>
<groupId>com.querydsl</groupId>
<artifactId>querydsl-apt</artifactId>
<version>5.0.0.M1</version>
</dependency>
java.lang.NoSuchFieldError: TREATED_PATH
at com.querydsl.jpa.JPQLTemplates.<init>(JPQLTemplates.java:147)
at com.querydsl.jpa.JPQLTemplates.<init>(JPQLTemplates.java:51)
at com.querydsl.jpa.JPQLTemplates.<clinit>(JPQLTemplates.java:46)
at com.querydsl.jpa.impl.JPAProvider.<clinit>(JPAProvider.java:59)
at com.querydsl.jpa.impl.JPAQuery.<init>(JPAQuery.java:48)
at com.querydsl.jpa.impl.JPAQueryFactory.query(JPAQueryFactory.java:138)
at com.querydsl.jpa.impl.JPAQueryFactory.select(JPAQueryFactory.java:72)
at com.querydsl.jpa.impl.JPAQueryFactory.selectFrom(JPAQueryFactory.java:102)
at com.example.demo.Demo4ApplicationTests.contextLoads(Demo4ApplicationTests.java:31
BmsPost.java
您有混合版本的 querydsl。我猜您使用的是 querydsl-core 版本 4.4.x,而您的 querydsl-jpa 是版本 5.0.0.M1。 (这可能是由 spring-boot 启动库引起的。)
无论如何,这可以通过明确添加正确版本的 querydsl-core 作为依赖项轻松解决。
<dependency>
<groupId>com.querydsl</groupId>
<artifactId>querydsl-core</artifactId>
<version>5.0.0.M1</version>
</dependency>