Java 弹簧数据未保存在带注释的列名中
我使用的是Java 弹簧数据未保存在带注释的列名中,java,mysql,spring,hibernate,spring-boot,Java,Mysql,Spring,Hibernate,Spring Boot,我使用的是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.S
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\u path”和“upload\u 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>
Spring数据存储库
public interface PhotoRepository extends JpaRepository<Photo, Integer> {
}
public interface photopository扩展了JpaRepository{
}
为什么会在数据库中自动创建这两个新列
我希望新的传入数据保存在带注释的“ImagePath”和“UploadDate”列中,而不是保存在它自己创建的新的“image_path”和“upload_date”列中。hibernate的默认命名策略通过将大写字母替换为小写字母来将字段名称映射到DB中的列。要覆盖此策略(在spring boot中),可以使用此属性
spring.jpa.hibernate.naming.physical-strategy=org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImp
有关更多详细信息,请查看此我能够理解您的问题,但它没有足够的信息来帮助您。请更新您的问题更多的源代码和解释。您的问题与JPA命名策略设置有关。阅读此文。@Johna感谢您提供的解决方案,并指出问题的原因。
spring.jpa.hibernate.naming.physical-strategy=org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImp