Spring Data Jpa 不是托管类型导入实体

beq87vna  于 9个月前  发布在  Spring
关注(0)|答案(2)|浏览(131)

我有一个maven多模块项目。它由两个spring Boot 3应用程序和一个公共库组成,共享dtos。两个spring Boot 应用程序都工作得很好。我试图做的是使用一个spring Boot 应用程序的存储库和实体到另一个,也许是不可能的。所以我有这个app1,它应该扫描app2的实体和存储库:

@SpringBootApplication
@EntityScan(basePackages={"com.acme.app1.entity","com.acme.app2.entity"})
@EnableJpaRepositories(basePackages={"com.acme.app1.repository","com.acme.app2.repository"})

public class App1 {...}

字符串
app2实体和仓库是这样的:

package com.acme.app2.entity;

@Entity
@DynamicUpdate
@Table(indexes = {...})
public class Home  {
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    @JdbcTypeCode(SqlTypes.VARCHAR)
    @Column(name = "id", columnDefinition = "VARCHAR(36)", updatable = false, nullable = false)
    private UUID id;
    ....


和repository:

package com.acme.app2.repository;

@Repository
public interface HomeRepository extends JpaRepository<Home, UUID> {...}


所以我认为App1可以看到App2的实体和存储库,但是当我尝试在这样的服务中使用它时:

package com.acme.app1.service;

import com.acme.app2.repository.HomeRepository;

@Service
public class DefaultApp1Service extends Throwable implements App1Service {

 
    @Autowired
    private  HomeRepository homeRepository;


首先,IntelliJ告诉我homeRepository无法连接,找不到HomeRepository类型的bean,当我运行应用程序时,
不是托管类型:类com.acme.app2.entity.Stock

nhjlsmyf

nhjlsmyf1#

我创建了一个示例来测试从另一个maven模块https://github.com/Lefeverw/stackoverflow-importing-entity导入存储库/实体:
IDE确实会给予一条警告消息,指出homeRepository无法自动连接。然而,代码确实编译并成功运行。在我看来,这可能是IDE的限制(可能它没有正确处理@EnableJpaRepositories注解)。
关于错误消息Not a managed type: class com.acme.app2.entity.Stock。我怀疑这里还有其他错误,但如果没有更多信息,就不可能弄清楚到底是什么。你能分享更多的代码或上传一个最小的,可重复的示例到GitHub吗?
在任何情况下,您都可以自由使用示例并与当前代码进行比较。祝您好运!

djp7away

djp7away2#

我发现了问题所在。在app 1中,我将数据库连接配置为两个数据库,一个用于读取,一个用于写入,由于某种原因,这会阻止实体扫描。我回滚到一个数据库连接,用于读取和写入,现在它工作正常!

相关问题