办公室已经很晚了,您陷入了这个带有JoinColumns和层叠的奇怪的Jpa代码中,而您找不到错误所在。 您希望有一种方法可以查看打印的查询以及值。
稍微调整一下Spring Boot应用程序就可以实现。
借助lombock,这是我们的jpa模型。
package com.gkatzioura.hibernatelog.dao; import javax.persistence.Entity; import javax.persistence.Id; import javax.persistence.Table; import lombok.Data; @Data @Entity @Table (name = "application_user" ) public class ApplicationUser { @Id private Long id; private String username; private String password; }
是仓库
package com.gkatzioura.hibernatelog.dao; import org.springframework.data.repository.CrudRepository; public interface ApplicationUserRepository extends CrudRepository { }
找不到异常
package com.gkatzioura.hibernatelog.controller; import org.springframework.http.HttpStatus; import org.springframework.web.bind.annotation.ResponseStatus; @ResponseStatus (value = HttpStatus.NOT_FOUND) @ResponseStatus (value = HttpStatus.NOT_FOUND) class ApplicationUserNotFoundException extends RuntimeException { public ApplicationUserNotFoundException() { } public ApplicationUserNotFoundException(String message) { super (message); } public ApplicationUserNotFoundException(String message, Throwable cause) { super (message, cause); } public ApplicationUserNotFoundException(Throwable cause) { super (cause); } public ApplicationUserNotFoundException(String message, Throwable cause, boolean enableSuppression, boolean writableStackTrace) { super (message, cause, enableSuppression, writableStackTrace); } }
还有一个控制器
package com.gkatzioura.hibernatelog.controller; import java.util.Optional; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.ResponseBody; import org.springframework.web.bind.annotation.RestController; import com.gkatzioura.hibernatelog.dao.ApplicationUser; import com.gkatzioura.hibernatelog.dao.ApplicationUserRepository; @RestController public class ApplicationUserController { private final ApplicationUserRepository applicationUserRepository; public ApplicationUserController(ApplicationUserRepository applicationUserRepository) { this .applicationUserRepository = applicationUserRepository; } @GetMapping ( "/user/{id}" ) @ResponseBody public ApplicationUser getApplicationUser( @PathVariable Long id) { Optional applicationUser = applicationUserRepository.findById(id); if (applicationUser.isPresent()) { return applicationUser.get(); } else { throw new ApplicationUserNotFoundException(); } } }
通过将以下内容添加到application.yaml中,我们确保通过休眠创建表,查询记录,所记录的sql查询的格式以及显示的实际参数值。
spring: jpa: hibernate: ddl-auto: create properties: hibernate: show_sql: true use_sql_comments: true format_sql: true logging: level: org: hibernate: type: trace
只是
curl http: //localhost :8080 /user/1
然后您得到了日志。
翻译自: https://www.javacodegeeks.com/2019/08/spring-boot-hibernate-print-queries-variables.html