java - @EntityScan 不扫描
问题描述
我有集成和 Spring Data JPA 的 Spring Boot 应用程序。配置如下:
应用程序类:
@SpringBootApplication
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
集成配置类
@Configuration
@EnableIntegration
public class IntegrationConfiguration {
private static final String FILE_PATTERN = "*.XML";
@Value("${spring.integration.input-directory}")
private String inputDirectory;
@Value("${spring.integration.output-directory}")
private String outputDirectory;
@Value("${spring.integration.threads}")
private int threadsCount;
@Resource
private ActualStatusRepository actualStatusRepository;
//. . . removed file splitter and channels
@Bean(name = "fiasEntityRouter")
@Router(inputChannel = "afterSplitChannel")
AbstractMappingMessageRouter fiasEntityRouter() {
Map<String, String> routingMap = ImmutableMap.<String, String>builder()
.put("ru.ecoteck.entity.ActualStatus", "actualStatusChannel")
.build();
PayloadTypeRouter router = new PayloadTypeRouter();
router.setChannelMappings(routingMap);
router.setDefaultOutputChannel(logChannel());
return router;
}
@Bean(name = "actualStatusChannel")
public MessageChannel actualStatusChannel() {
return new DirectChannel();
}
@Bean(name = "actualStatusHandler")
@ServiceActivator(inputChannel = "actualStatusChannel")
public MessageHandler actualStatusHandler() {
return new ActualStatusHandler(actualStatusRepository);
}
}
因此,应用程序开始读取 XML 文件,将它们分成几块,反序列化(通过 XStream),然后保存对象,我得到一个表actual_statuses
不存在的错误。但是在我@Entity
的带注释的类中,我使用了一个带有名称的表ActualStatuses
@XStreamAlias("ActualStatus")
@Entity
@Table(name = "ActualStatuses")
public class ActualStatus {
@XStreamAsAttribute
@XStreamAlias("ACTSTATID")
@Id
@Column(name = "ACTSTATID", nullable = false)
private int id;
// . . .
}
ActualStatusHandler
只是打电话repository.save(message.getPayload)
,但有几个保护代码。似乎只有搜索@Entity
类的问题。Spring Boot 版本是 2.1.5.RELEASE。我尝试了显式注释@EntityScan("my.package.entity")
,但没有效果。我不使用任何自定义数据库层配置。只是application.properties
#database
spring.datasource.url=jdbc:postgresql://localhost:5432/fias
spring.datasource.username=fias
spring.datasource.password=fias
spring.datasource.driverClassName=org.postgresql.Driver
spring.jpa.hibernate.ddl-auto=none
spring.jpa.open-in-view=false
spring.jpa.properties.hibernate.jdbc.lob.non_contextual_creation=true
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.PostgreSQL95Dialect
# for debug
spring.jpa.show-sql=true
怎么了?非常感谢你帮助我。
解决方案
所以,参数
spring.jpa.hibernate.naming.physical-strategy=org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl
成功了,现在应用程序按预期工作。感谢帕特里克为我指出了正确的挖掘方向。
推荐阅读
- bash - Bash - 每次输入另一个参数时,有没有办法用参数替换 bash 命令?
- java - 如何序列化实现 Serializable 但包含不包含字段的对象?
- java - 从 java 设置一个 kotlin lambda
- mongodb - 根据两个字段将文档拆分为两个文档(带聚合)
- python - 使数据加载器(屈服函数)缓冲其下一个产量
- acumatica - 在新屏幕上发布发票
- codenameone - CodenameOne 是否会支持将图像和/或文件保存到用户可以在应用程序外部访问的位置?
- c - 浮点数转换方法
- javascript - 包含使用导入时未定义 Webpack 函数
- oracle - 将 Null 传递到带有 DATA_DEFAULT 集的 Oracle 表的 NOT NULLABLE 列时出错 - 实体框架