当前位置: 首页 > 知识库问答 >
问题:

Spring数据未保存在带注释的列名中

臧彭亮
2023-03-14

我正在使用MySQL数据库和Spring数据。每次我试图保存数据时,都会出错

2019-07-16 15:35:54.590  WARN 8972 --- [nio-8090-exec-9] o.h.engine.jdbc.spi.SqlExceptionHelper   : SQL Error: 1364, SQLState: HY000
2019-07-16 15:35:54.591 ERROR 8972 --- [nio-8090-exec-9] o.h.engine.jdbc.spi.SqlExceptionHelper   : Field 'ImagePath' doesn't have a default value
org.springframework.orm.jpa.JpaSystemException: could not execute statement; nested exception is org.hibernate.exception.GenericJDBCException: could not execute statement

编译后得到这个错误后,我发现数据库内部添加了两个新的实体:"image_path"和"upload_date"。我没有编写任何代码来做这样的事情。

我再次编译以查看image_path列是否插入了ImagePath实体应该插入的数据。

实体

@Entity
@Table(name="photo")
public class Photo {

    @Id
    @Column(name="id")
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Integer id; 

    @Column(name="albumID")
    private int albumID;

    @Column(name="LocationID")
    private int locationID;

    @Column(name="Title")
    private String title;

    @Column(name="Description")
    private String description;

    @Column(name="UploadDate")
    private Timestamp uploadDate;

    @Column(name="ImagePath")
    private String imagePath;


*ommited getters and setters for abbreviation*
}

胸腺形态

<form action="#" th:action="@{/addPost}" th:object="${photo}" method="post" enctype="multipart/form-data">  
    Select File: <input type="file" name="file"/>  

    <input type="text" th:field="*{title}" class="form-control mb-4 col-4" placeholder="Title of the Photo">    
    <input type="text" th:field="*{description}" class="form-control mb-4 col-4" placeholder="Description"> 
    <input type="submit" value="Upload File"/>  
</form>  

控制器

    @PostMapping(value="/addPost")  
    public String upload(@RequestParam MultipartFile file, 
            HttpSession session,
            @ModelAttribute ("photo") Photo photo ){ 

            String path=session.getServletContext().getRealPath("/");  
            String filename=file.getOriginalFilename();  
            String savedPath = (path + filename);

            try{  
            byte barr[]=file.getBytes();  

            BufferedOutputStream bout=new BufferedOutputStream(  
                     new FileOutputStream(path+"/"+filename)); 

            photo.setAlbumID(1);
            photo.setImagePath(savedPath);
            photo.setLocationID(1);
            photoService.save(photo);
            bout.write(barr);  

            bout.flush();  
            bout.close();      

            }catch(Exception e){System.out.println(e);}  
            //return new ModelAndView("upload-success","filename",path+"/"+filename);  
            return "/user";
        }  

Spring数据存储库

public interface PhotoRepository extends JpaRepository<Photo, Integer> {

}

SQl数据库

为什么会在数据库中自动创建这两个新列?

我希望新的输入数据保存在带注释的“ImagePath”和“UploadDate”列中,而不是保存在它自己创建的新“image_path”和“upload_date”列中。

共有1个答案

霍襦宗
2023-03-14

hibernate的默认命名策略通过将大写字母替换为小写字母,将字段名称映射到DB中的列。要覆盖此策略(在spring boot中),可以使用此属性

spring.jpa.hibernate.naming.physical-strategy=org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImp

有关更多详细信息,请查看此链接

 类似资料:
  • 根据java docs for@Lock Annotation: 用于指定执行查询时要使用的LockModeType的注释。在查询方法上使用Query或从方法名称派生查询时,将评估它。 如上所述,将使用@Query annotation或findBySomething对其进行评估。。()方法。 但根据我的发现,当我在任何方法中使用@Transactional放置@Lock注释,并在该事务方法中从d

  • 我在我的项目中使用spring data jpa和spring mvc。然而,我总是得到错误。 如果我注释jpaconfig.java,我的应用程序运行良好。 我不知道为什么?请你帮帮我: 我的代码: WebAppConfig.java jpaconfig.java 应用程序.属性

  • 我使用Spring AOP拦截方法执行。 我有一个界面,如下所示: 以下是接口的实现: 现在我希望任何使用@AwesomeAnnoting注释的参数的方法都应该被Spring AOP捕获。 所以我写了以下方面,这是有效的。 但是,当我尝试查找参数注释时,我没有得到任何注释。如上所述,annotationMatrix为空。 所以我的问题是: 为什么annotationMatrix为空?可能是因为参数

  • 我有一个具有依赖项的Spring Boot应用程序。我的实体类有一个带有列名的列注释。例如: 由此生成的SQL将创建为列名。在寻找解决方案之后,我发现解决了这个问题(列名取自列注释)。 但是,我的问题是为什么没有将naming_strategy设置为,JPA忽略列注释?也许冬眠方言与此有关?我正在连接到MS SQL 2014 Express,我的日志包含:

  • 问题内容: 我有一个yaml文件,看起来像这样: 有没有一种方法,我可以和这个数据,同时保持有何评论? 问题答案: PyYAML丢弃了非常低的注释(以中)。 尽管您可以调整或扩展它以处理整个堆栈中的注释,但这将是一个重大修改。发出(=发出)注释似乎更容易,并且在旧的PyYAML错误跟踪器的故障单114中对此进行了讨论。 截至2020年,有关增加对加载评论的支持的功能请求仍处于停滞状态。