【问题标题】:Hibernate - Incomprehensible WarningHibernate - 无法理解的警告
【发布时间】:2012-02-07 14:52:32
【问题描述】:

我已经构建了一个通过 JPA 2 使用 Hibernate 的独立 Java 应用程序(批处理)。 它运行良好,但我经常在日志中看到此警告。

我用谷歌搜索并直接阅读了源代码,但没有运气。

WARN    org.hibernate.type.TypeFactory  TypeFactory.java:69     Scoping types to session factory org.hibernate.impl.SessionFactoryImpl@f876ce2 after already scoped org.hibernate.impl.SessionFactoryImpl@3fd7165

不知道是什么意思?

【问题讨论】:

  • 您是否定义了多个使用相同类型的工厂?
  • 其实我是动态添加新实体到Session中的。

标签: java hibernate jpa-2.0


【解决方案1】:

这是你两次设置会话工厂的时候(会话工厂已经设置好了)。将日志记录设置为跟踪并查找它显示“将类型范围设置为会话工厂”的位置,然后在某些时候再次设置它,它似乎不会导致问题,但在理想情况下,API 看起来应该只曾经设置过一次工厂。

【讨论】:

  • 实际上,我正在创建一个配置对象并通过向其中添加新实体来不断地重用它。每次添加新实体时创建一个新配置可以解决我的问题。
【解决方案2】:

直接来自来源:

public final class TypeFactory implements Serializable {
    private static final Logger log = LoggerFactory.getLogger( TypeFactory.class );

    private final TypeScopeImpl typeScope = new TypeScopeImpl();

    public static interface TypeScope extends Serializable {
        public SessionFactoryImplementor resolveFactory();
    }

    private static class TypeScopeImpl implements TypeFactory.TypeScope {
        private SessionFactoryImplementor factory;

        public void injectSessionFactory(SessionFactoryImplementor factory) {
            if ( this.factory != null ) {
                log.warn( "Scoping types to session factory {} after already scoped {}", this.factory, factory );
            }
            else {
                log.trace( "Scoping types to session factory {}", factory );
            }
            this.factory = factory;
        }

...

【讨论】:

  • 什么是作用域?这是使用不同工厂的范围类型的错误吗?
  • 我不知道,我认为消息来源可能会向您澄清“问题”!
猜你喜欢
  • 1970-01-01
  • 2012-01-07
  • 2020-10-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-08-05
  • 1970-01-01
  • 2017-12-04
相关资源
最近更新 更多