我想我正在尝试做一些非常简单的事情.在JPA中使用Spring Boot(1.3.3.RELEASE)我想设置一个表名.
@Entity
@Table(name = "MyTable_name")
public class MyTableData {
...
}
Run Code Online (Sandbox Code Playgroud)
我期望在我的数据库中有一个带有"MyTable_name"的表.对我来说似乎完全合理.但这不会发生.我得到一个名为"MY_TABLE_NAME"(H2后端)或"my_table_name"(Postgre后端)的表.从这里开始,我会坚持使用Postgre,因为我的目标是读取一个我不控制表名的现有数据库.
经过一些研究后,我发现帖子说我应该使用spring.jpa.hibernate.naming-strategy属性.这没有多大帮助.设置为最常推荐的org.hibernate.cfg.ImprovedNamingStrategy会产生相同的行为:"my_table_name".设置为org.hibernate.cfg.EJB3NamingStrategy会生成"mytable_name".设置为org.hibernate.cfg.DefaultNamingStrategy会导致Spring内部的应用程序上下文错误.
辞职写我自己,我开始看org.hibernate.cfg.ImprovedNamingStrategy.我发现它使用了弃用的org.hibernate.cfg.NamingStrategy.这表明使用NamingStrategyDelegator.我查看了它的Java文档,但不确定如何应用.我找到了这篇文章.尽管我很欣赏这个解释,但是我想要做的事情比我需要的更复杂,而且我在应用它时遇到了麻烦.
那么我的问题是如何让Spring JPA只使用我指定的名称?是否有使用NamingStrategyDelegator的新属性?我需要编写自己的策略吗?
===========更新==========================
我想我正在回答一个问题.我创建了一个简单的Spring启动应用程序(与我的生产项目分开).我使用H2作为后端DB.
关于Hiberate 5命名的讨论非常有用.有了它,我想出了如何在Hibernate 5中设置命名策略,如下所示(在application.properties中).
hibernate.implicit_naming_strategy=org.hibernate.boot.model.naming.ImplicitNamingStrategyLegacyHbmImpl
hibernate.physical_naming_strategy=org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl
Run Code Online (Sandbox Code Playgroud)
我创建了一个通过名称传递的物理命名策略(如org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl)并打印出值.从那里我看到表名是我想通过物理命名层.
然后我设置hibernate.show_sql = true来显示生成SQL.在生成的SQL中,名称也是正确的.
我正在使用DatabaseMetaData检查表名.
private void showTables() throws SQLException {
DatabaseMetaData dbMetadata = getConnection().getMetaData();
ResultSet result = dbMetadata.getTables(null, null, null, new String[] { "TABLE" });
if (result != null) {
boolean haveTable = false;
while (result.next()) {
haveTable = true;
getLogger().info("Found table {}", result.getString("TABLE_NAME"));
}
if (!haveTable) { …Run Code Online (Sandbox Code Playgroud) 我设置了支持ssh的Docker镜像.没问题,很多例子.但是,大多数示例都显示使用passwd设置密码.我想发布我的图片.拥有固定密码,尤其是root用户,似乎是一个巨大的安全漏洞.对我来说,更好的方法是使用没有密码的root设置映像.当用户获取图像时,他们会将其公共ssh文件复制到图像/root/.ssh/authorized_keys文件中.
有推荐的方法吗?
我在 Java 中使用 Spring 框架。有了它,我正在尝试编写一个 API 端点,该端点接受一个文件进行上传。我不想使用表单数据。基本上我希望以下 curl 命令在我的端点上工作
curl -XPOST localhost:8080/upload -d @local_file.data
Run Code Online (Sandbox Code Playgroud)
有没有办法用Spring做到这一点?似乎我想将 @RequestBody 与 File 一起使用,但对大多数人来说,这似乎是一个可怕的想法。为什么?MultipartFile 与 File 有何不同?仅仅因为它支持表单数据?
我能找到的只是关于表单和 MultipartFile 的讨论。我正在做的事情本质上是错误的吗?我在使用 Python/Django 之前就已经完成了,这并不难。