我正在使用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”列中。
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年,有关增加对加载评论的支持的功能请求仍处于停滞状态。