小编Eri*_*reg的帖子

在Spring JPA中设置表名

我想我正在尝试做一些非常简单的事情.在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)

spring naming hibernate jpa

10
推荐指数
1
解决办法
1万
查看次数

在Docker镜像上设置ssh公钥

我设置了支持ssh的Docker镜像.没问题,很多例子.但是,大多数示例都显示使用passwd设置密码.我想发布我的图片.拥有固定密码,尤其是root用户,似乎是一个巨大的安全漏洞.对我来说,更好的方法是使用没有密码的root设置映像.当用户获取图像时,他们会将其公共ssh文件复制到图像/root/.ssh/authorized_keys文件中.

有推荐的方法吗?

  1. 使用用户可以编辑的ADD命令提供基于我的图像构建的Dockerfile?
  2. 提供一个运行类似"cat~/.ssh/authorized_keys | docker run -i sh -c'cat> root/.ssh/authorized_keys"的shell脚本?

ssh key sshd authorized-keys docker

4
推荐指数
1
解决办法
4628
查看次数

在不使用表单数据的情况下在 Spring 中上传文件

我在 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 之前就已经完成了,这并不难。

java upload file spring-mvc

2
推荐指数
1
解决办法
1964
查看次数

标签 统计

authorized-keys ×1

docker ×1

file ×1

hibernate ×1

java ×1

jpa ×1

key ×1

naming ×1

spring ×1

spring-mvc ×1

ssh ×1

sshd ×1

upload ×1