当前位置: 首页 > 知识库问答 >
问题:

quarkus和hibernate映射(现场访问)

蒯卓君
2023-03-14

我将一个在JEE wildfly工作的实体转移到quarkus:

@Entity
@Getter
@Setter
public class Item {

@Column(name = "archived")
private OffsetDateTime archived;

public boolean isArchived() {
    return archived != null;
}
}

在dev模式下运行后,我得到这个错误:


Caused by: org.hibernate.MappingException: 
In trying to locate getter for property [archived], 
Class [com.Item] 
defined both a `get` [public java.time.OffsetDateTime com.Item.getArchived()] 
and `is` [public boolean com.Item.isArchived()] variant
    at org.hibernate.internal.util.ReflectHelper.checkGetAndIsVariants(ReflectHelper.java:538)
    at org.hibernate.internal.util.ReflectHelper.verifyNoGetVariantExists(ReflectHelper.java:562)
    at org.hibernate.internal.util.ReflectHelper.getGetterOrNull(ReflectHelper.java:502)
    at org.hibernate.internal.util.ReflectHelper.findGetterMethod(ReflectHelper.java:424)
    at org.hibernate.internal.util.ReflectHelper.getterMethodOrNull(ReflectHelper.java:571)
    at org.hibernate.property.access.internal.PropertyAccessMixedImpl.getAccessType(PropertyAccessMixedImpl.java:97)
    at org.hibernate.property.access.internal.PropertyAccessMixedImpl.<init>(PropertyAccessMixedImpl.java:47)
    at org.hibernate.property.access.internal.PropertyAccessEnhancedImpl.<init>(PropertyAccessEnhancedImpl.java:28)
    at org.hibernate.property.access.internal.PropertyAccessStrategyEnhancedImpl.buildPropertyAccess(PropertyAccessStrategyEnhancedImpl.java:27)
    at org.hibernate.mapping.Property.getGetter(Property.java:311)
    at org.hibernate.tuple.entity.PojoEntityTuplizer.buildPropertyGetter(PojoEntityTuplizer.java:255)
    at org.hibernate.tuple.entity.AbstractEntityTuplizer.<init>(AbstractEntityTuplizer.java:142)
    at org.hibernate.tuple.entity.PojoEntityTuplizer.<init>(PojoEntityTuplizer.java:59)
    ... 35 more

我理解这个错误,但我不知道为什么这个冬眠映射在野蝇中工作,而在夸克中不工作?当我声明jpa字段访问而不是jpa属性访问时,hibernate应该将isArchived()自动视为瞬态

或者quarkus是否将所有这些字段注入编译为属性注入?

共有1个答案

章玮
2023-03-14

Quarkus为存档的字段生成一个getter。Hibernate在这里抱怨说,archived字段有两个访问器:isArchived()getArchived()

这是一个Hibernate问题/限制,与Quarkus无关。

我认为最好的方法是重命名您的isArchived()方法,因为Hibernate不知道使用哪种方法来检索存档的字段的值。如果你把@瞬态添加到你的isArchived()方法中,它可以(取决于它首先得到的方法)把你的字段作为瞬态处理。

 类似资料:
  • 我正在使用Hibernate和JPA注释来映射我的类。当hibernate尝试映射这个类时,我遇到了一个问题 我的Social alStat类是: 我得到了这个错误: 我猜发生这种情况是因为我试图映射到一个基本类,但@ElementCollection注释不应该解决这个问题吗? 我的item类如下所示:

  • 我正在尝试用quarkus、hibernate和postgres开发一个多租户应用程序。 Hibernate Responsive通过让implement支持多租户: http://hibernate.org/reactive/documentation/1.0/reference/html_single/#_custom_connection_management_and_multitenanc

  • 问题内容: 我正在尝试在Elasticsearch中映射多字段 第一个字段-“中”应包含所有索引列, 第二个字段-“ orig”应按原样包含文本。 例如: 一旦创建并查询,它就是它的外观。 当index =’no’时,是否意味着该字段将永远不会被索引? 问题答案: 对于不同的类型有不同的含义。由于现场在你的问题是它有以下根据意思。 no表示根本无法搜索(作为单个字段;它仍可能包含在_all中)。设

  • 下列的 XML 映射应该是很直白的。例如: <?xml version="1.0"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> <hib

  • 问题内容: 我想用Hibernate映射超类中的通用字段。 我的母亲班是: 一个子类: 如您所见,我将覆盖value字段以指定要在数据库中使用的列。我的表ParameterValue由几列组成,每种类型对应一列。 但是hibernate抱怨: 好的,但是超类中getValue的良好配置是什么?(我在“需要帮助的地方”发表了评论) 问题答案: 我很确定您不能将单个Java属性映射到三个不同的列。您将

  • 我正在尝试在OneToOne映射中加入Hibernate实体。我能够从Main Entity获取给定主键的数据,但是加入实体返回null。我是Hibernate新手,任何帮助都将不胜感激。 我有两张桌子, PT\U核心 主键:ptId—整数 ST_AUX 主键:stId; 列:stId, stName 这两个表由其他应用程序填充,而我的是只读操作。 下面是我的第一个实体类(PtCore.java)