Entity
@Table(name = "batch")
@NamedEntityGraph(name = "withLobs", attributeNodes = {
@NamedAttributeNode(value = "log"),
@NamedAttributeNode(value = "json"),
})
public class Batch extends PanacheEntityBase
{
@Id
@GeneratedValue(strategy = GenerationType.AUTO, generator = "HIBERNATE_SEQUENCE")
@GenericGenerator(name = "HIBERNATE_SEQUENCE", strategy = "native")
public long id;
// other properties
@Basic(fetch = FetchType.LAZY)
@Lob
public byte[] json;
@Basic(fetch = FetchType.LAZY)
@Lob
@Column(name = "`log`")
public byte[] log;
}
does按预期工作(json和log是用lazy加载的,带有额外的查询)。
应用实体图:
final List<Batch> b = Batch.findAll(Sort.descending("creationDate"))
withHint(QueryHints.HINT_FETCHGRAPH, Panache.getEntityManager().getEntityGraph("withLobs"))
page(Page.of(pagination.page - 1, pagination.limit)).list();
json和log不包含在main select中,并且始终使用+1 select读取。
我尝试将quarkus.hibernate-orm.unsupported-properties."hibernate.bytecode.allow_enhancement_as_proxy"=true
添加到application.properties
中,作为
<plugin>
<groupId>org.hibernate.orm.tooling</groupId>
<artifactId>hibernate-enhance-maven-plugin</artifactId>
<executions>
<execution>
<configuration>
<failOnError>true</failOnError>
<enableLazyInitialization>true</enableLazyInitialization>
</configuration>
<goals>
<goal>enhance</goal>
</goals>
</execution>
</executions>
</plugin>
在pom.xml中,但没有成功(但我很确定字节码增强已经在Quarkus中活跃)。
有什么建议吗?
1条答案
按热度按时间vngu2lb81#
使用Quarkus时,您不需要
quarkus.hibernate-orm.unsupported-properties."hibernate.bytecode.allow_enhancement_as_proxy"=true
或hibernate-enhance-maven-plugin
。Quarkus会自动完成增强。所以这不是问题所在。根据您使用的版本,它可能只是一个bug。Hibernate ORM 5中的实体图支持......不完整。Hibernate ORM 6彻底检查了这部分代码,并且在实体图方面更加可靠。请再次尝试Quarkus 3.0.0.Beta1(使用Hibernate ORM 6.2.0.CR4),如果仍然不起作用,您应该报告一个bug:https://hibernate.atlassian.net/browse/HHH