不同包中的实体创建“引用未知实体”(多数据源场景)

我目前有 2 个不同的数据源配置可以正常工作。但是因为实体越来越多,我想把它们放在不同的包装上。

这是文件夹结构和数据库配置。

本地数据库配置。(2张)

http://img.mukewang.com/61b301540001f31909350726.jpg

http://img3.mukewang.com/61b3015b0001f5ae09730398.jpg

文件夹结构是这样的

http://img.mukewang.com/61b3016a00012d8e03320363.jpg

发生的异常:

org.springframework.beans.factory.BeanCreationException:在类路径资源 [com/bennusoft/merlin/robot/business/database/LocalDBConfig.class] 中定义名称为“localEntityManager”的 bean 创建时出错:调用 init 方法失败;嵌套异常是 org.hibernate.AnnotationException: @OneToOne 或 @ManyToOne on com.bennusoft.merlin.robot.business.database.a.BilyonerBahisSoccerSpecialDatabase.iddaaGeneralDatabases 引用了一个未知实体:com.bennusoft.merlin.robot.business.database.IddaGeneralDatabase

如果 BilyonerBahisSoccerSpecialDatabase 在同一个包中,它会简单地运行没有问题。但是当它低于包时,就会发生异常。

不知何故,在我看来,从 BilyonerBahisSoccerSpecialDatabase 到上层包没有看到。但我不知道我实际上可以在哪里。

我怎样才能使这个工作与不同的包一起工作?

更新 1: 如果我只使用 .packages(IddaaGeneralDatabase.class) 保留在 factorybean 中,问题就解决了。

所以我的问题实际上正在改变。为什么添加不同的包会破坏它?


芜湖不芜
浏览 157回答 1
1回答

不负相思意

来自EntityManagerFactoryBuilder.java Builder.packages(Class<?>... basePackageClass)方法的源代码&nbsp; &nbsp; public Builder packages(Class<?>... basePackageClasses) {&nbsp; &nbsp; &nbsp; &nbsp; Set<String> packages = new HashSet<>();&nbsp; &nbsp; &nbsp; &nbsp; for (Class<?> type : basePackageClasses) {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; packages.add(ClassUtils.getPackageName(type));&nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; &nbsp; &nbsp; this.packagesToScan = StringUtils.toStringArray(packages);&nbsp; &nbsp; &nbsp; &nbsp; return this;&nbsp; &nbsp; }以及如何调用构建器方法&nbsp; return builder.dataSource(mysqlDataSource())&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; .properties(hibernateProperties())&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; .packages(IddaaGeneralDatabase.class)&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; .packages(BilyonerBahisSoccerSpecialDatabase.class)&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; .....您调用包方法的方式不正确。每次调用packages方法this.packagesToScan的Builder将被覆盖。因此,在您第二次调用之后,this.packagesToScan现在com.bennusoft.merlin.robot.business.database.a和包com.bennusoft.merlin.robot.business.database中的类不会被扫描。另外,在你更新后,第二个调用被移除,this.packagesToScan保留为com.bennusoft.merlin.robot.business.database,这个包和子包被扫描,因此问题解决了。如果您需要添加其他类,该类的一个包不是其他类的子包,则可以调用builder.packages(ClassA.class, ClassB.class)。最后,下次请尝试将代码复制并粘贴到帖子而不是屏幕帽,这有助于我们阅读/复制代码并了解您的问题。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java