- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我尝试构建非常简单的实体并使用 Hibernate 5.4.1.Final 和 Java8 将其保存在数据库中。为了消除状态突变,将跳过“ setter ”并使用@Access(AccessType.FIELD)。不幸的是,当 Hibernate 启动时,会抛出此异常:
org.springframework.beans.factory.BeanCreationException:
Error creating bean with name 'entityManagerFactory' defined in class path resource [application-context.repositories.xml]:
Invocation of init method failed;
nested exception is javax.persistence.PersistenceException:
[PersistenceUnit: default] Unable to build Hibernate SessionFactory;
nested exception is org.hibernate.MappingException:
Could not get constructor for org.hibernate.persister.entity.SingleTableEntityPersister
我发现在将产品类定为最终版本后,一切正常。问题是我不明白为什么??? 你能帮我理解发生了什么吗?
一些代码。这不起作用:
import javax.persistence.Access;
import javax.persistence.AccessType;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;
import lombok.Builder;
import lombok.Getter;
@Entity
@Access(AccessType.FIELD)
@Table(name = "product")
public class Product {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
@Getter
private String name;
@Getter
private String colour;
protected Product() {
}
@Builder
public Product(String name, String colour) {
this.name = name;
this.colour = colour;
}
}
添加final就足够了
public final class Product {
并且它有效。
application-context.repositories.xml 只通知 spring 存储库在哪里
<jpa:repositories base-package="a.b.c.repositories"/>
在调试时我还发现下面的异常之一是
HibernateException -> Unable to instantiate default tuplizer [org.hibernate.tuple.entity.PojoEntityTuplizer]
知道为什么需要“最终”吗?
//编辑
安德洛尼克斯指出了正确的方向:
现在我知道如果类不是最终的,hibernate会尝试构建一个代理,异常来自ByteBuddyProxyHelper.class
return byteBuddyState.loadProxy( persistentClass, new TypeCache.SimpleKey(key), byteBuddy -> byteBuddy
.ignore( byteBuddyState.getProxyDefinitionHelpers().getGroovyGetMetaClassFilter() )
.with( new NamingStrategy.SuffixingRandom( PROXY_NAMING_SUFFIX, new NamingStrategy.SuffixingRandom.BaseNameResolver.ForFixedValue( persistentClass.getName() ) ) )
.subclass( interfaces.length == 1 ? persistentClass : Object.class, ConstructorStrategy.Default.IMITATE_SUPER_CLASS_OPENING )
.implement( (Type[]) interfaces )
.method( byteBuddyState.getProxyDefinitionHelpers().getVirtualNotFinalizerFilter() )
.intercept( byteBuddyState.getProxyDefinitionHelpers().getDelegateToInterceptorDispatcherMethodDelegation() )
.method( byteBuddyState.getProxyDefinitionHelpers().getHibernateGeneratedMethodFilter() )
.intercept( SuperMethodCall.INSTANCE )
.defineField( ProxyConfiguration.INTERCEPTOR_FIELD_NAME, ProxyConfiguration.Interceptor.class, Visibility.PRIVATE )
.implement( ProxyConfiguration.class )
.intercept( byteBuddyState.getProxyDefinitionHelpers().getInterceptorFieldAccessor() )
);
最佳答案
不确定,为什么使用final
关键字它会起作用,也许它与代理生成有关。我认为这里的问题是来自 lombok 的 @Builder
。一个bug据报道,添加 @Builder
注释会删除 hibernate 所需的默认构造函数。
关于java - Hibernate 仅在类为 Final 时才起作用 [否则抛出 SingleTableEntityPersister],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54539094/
今天有小伙伴给我留言问到,try{...}catch(){...}是什么意思?它用来干什么? 简单的说 他们是用来捕获异常的 下面我们通过一个例子来详细讲解下
我正在努力提高网站的可访问性,但我不知道如何在页脚中标记社交媒体链接列表。这些链接指向我在 facecook、twitter 等上的帐户。我不想用 role="navigation" 标记这些链接,因
说现在是 6 点,我有一个 Timer 并在 10 点安排了一个 TimerTask。之后,System DateTime 被其他服务(例如 ntp)调整为 9 点钟。我仍然希望我的 TimerTas
就目前而言,这个问题不适合我们的问答形式。我们希望答案得到事实、引用资料或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visit the
我就废话不多说了,大家还是直接看代码吧~ ? 1
Maven系列1 1.什么是Maven? Maven是一个项目管理工具,它包含了一个对象模型。一组标准集合,一个依赖管理系统。和用来运行定义在生命周期阶段中插件目标和逻辑。 核心功能 Mav
我是一名优秀的程序员,十分优秀!