hibernate在第一次运行时正确创建并填充数据库.在第二轮,我得到以下错误.
Hibernate 5.2.0和Oracle 12c.这是一个错误吗?当我谷歌这个时,我几乎找不到任何信息.
@ManyToOne
@JoinColumn(name="fk_report")
@ForeignKey(name="fk_report")
private Report report;
Run Code Online (Sandbox Code Playgroud)
堆栈跟踪:
Initial SessionFactory creation failed.org.hibernate.tool.schema.spi.SchemaManagementException: Attempt to resolve foreign key metadata from JDBC metadata failed to find column mappings for foreign key named [FK_REPORT]
Exception in thread "main" java.lang.ExceptionInInitializerError
at bo.agi.config.HibernateUtil.buildSessionFactory(HibernateUtil.java:30)
at bo.agi.config.HibernateUtil.<clinit>(HibernateUtil.java:12)
at bo.agi.documentation.ReportDocumenter.doReportDocumentation(ReportDocumenter.java:124)
at bo.agi.documentation.BO_Exporter.main(BO_Exporter.java:237)
Caused by: org.hibernate.tool.schema.spi.SchemaManagementException: Attempt to resolve foreign key metadata from JDBC metadata failed to find column mappings for foreign key named [FK_REPORT]
at org.hibernate.tool.schema.extract.internal.InformationExtractorJdbcDatabaseMetaDataImpl$ForeignKeyBuilderImpl.build(InformationExtractorJdbcDatabaseMetaDataImpl.java:727)
at org.hibernate.tool.schema.extract.internal.InformationExtractorJdbcDatabaseMetaDataImpl$ForeignKeyBuilderImpl.build(InformationExtractorJdbcDatabaseMetaDataImpl.java:708)
at org.hibernate.tool.schema.extract.internal.InformationExtractorJdbcDatabaseMetaDataImpl.getForeignKeys(InformationExtractorJdbcDatabaseMetaDataImpl.java:691)
at org.hibernate.tool.schema.extract.internal.TableInformationImpl.foreignKeys(TableInformationImpl.java:88)
at org.hibernate.tool.schema.extract.internal.TableInformationImpl.getForeignKey(TableInformationImpl.java:99)
at …Run Code Online (Sandbox Code Playgroud) 我有一个我自动装配的 HsqldbReconciler(用于与 HSQLDB 数据库“工作”),例如:
@Autowired
HsqldbReconciler hsqldbReconciler;
Run Code Online (Sandbox Code Playgroud)
将来会有 OracleReconciler、MssqlReconciler 等。我需要根据用户选择的连接类型来使用它们。
我应该如何实施?通常我会有一种工厂,它只返回所需的协调器。我目前可以想象,spring 的唯一方法是自动装配每个 Reconciler 的一个实例,然后在代码中使用其中一个。有没有更好的办法?
我尝试了索引和命名参数,但它不起作用:
public interface CharacterRepository extends JpaRepository<Character, Long> {
@Query(nativeQuery=true, value="SELECT * FROM Character WHERE pinyin like '%:keyword%'")
List<Character> findByKeyword(@Param("keyword") String keyword);
}
Run Code Online (Sandbox Code Playgroud)
输出的sql是:
休眠:
SELECT
*
FROM
Character
WHERE
pinyin like '%:keyword%'
Run Code Online (Sandbox Code Playgroud)
为什么关键字占位符没有被我实际传递的参数替换?
我想让用户播放声音。我的实现在 Firefox 中运行良好。在 Safari 上不播放声音。我证实,音频控制在 safari 中与其他网站一起工作。所以,我假设,我必须在我的控制器中改变一些东西?
控制器:
@RequestMapping(value = "/sound/character/get/{characterId}", method = RequestMethod.GET, produces = {
MediaType.APPLICATION_OCTET_STREAM_VALUE })
public ResponseEntity playAudio(HttpServletRequest request,HttpServletResponse response, @PathVariable("characterId") int characterId) throws FileNotFoundException{
logger.debug("[downloadRecipientFile]");
de.tki.chinese.entity.Character character = characterRepository.findById(characterId);
String file = UPLOADED_FOLDER + character.getSoundFile();
long length = new File(file).length();
InputStreamResource inputStreamResource = new InputStreamResource( new FileInputStream(file));
HttpHeaders httpHeaders = new HttpHeaders();
httpHeaders.setContentLength(length);
httpHeaders.setCacheControl(CacheControl.noCache().getHeaderValue());
return new ResponseEntity(inputStreamResource, httpHeaders, HttpStatus.OK);
}
Run Code Online (Sandbox Code Playgroud)
看法
<audio id="voice" controls="">
<source src="/sound/character/get/2">
</audio>
Run Code Online (Sandbox Code Playgroud)
spring ×2
audio ×1
autowired ×1
ddl ×1
factory ×1
hibernate ×1
html ×1
jpql ×1
parameters ×1
spring-boot ×1
spring-mvc ×1
stream ×1