为什么我不使用sping boot-jpa从数据库中获取数据?

时间:2018-02-07 15:19:00

标签: java hibernate spring-boot spring-data-jpa

我创建了一个名为user的模型类:

SET hive.exec.compress.intermediate=true;
SET hive.exec.compress.output=true;
SET mapred.output.compression.type=BLOCK;

控制器类:

@Entity
@Table(name = "user")
public class User implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = "id")
private Long id;
@Column(name = "first_name")
private String firstName;
@Column(name = "last_name")
private String lastName;
@Column(name = "username")
private String username;
@Column(name = "created", columnDefinition="TIMESTAMP")
private LocalDateTime created;
@Column(name = "updated", columnDefinition="TIMESTAMP")
private LocalDateTime updated;
}

我的属性文件:

@RestController
@RequestMapping("/user")
public class UserController {
@RequestMapping(method = RequestMethod.GET)
@ResponseStatus(HttpStatus.OK)
@ResponseBody
public List<User> getUserList(){
    System.err.println("Get user list");
    List<User> all = userRepository.findAll();
    System.err.println("all = " + all);
    return all;
}
}

在邮递员中我发送一个get请求到:localhost:8080 / user,第一个系统错误显示... hibernate显示sql,但我没有得到用户。我试过传回一个字符串,它正常工作。如果我想要用户: spring.datasource.url=jdbc:mysql://localhost:3306/mydatabase? serverTimezone=UTC spring.datasource.username=root spring.datasource.password=root spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver spring.jpa.database-platform=org.hibernate.dialect.MySQL5Dialect spring.jpa.hibernate.ddl-auto=update spring.jpa.properties.hibernate.show_sql=true spring.jpa.properties.hibernate.format_sql=true 它只是加载......但什么都不做。在存储库文件中,我使用jparepository中的extends。 有什么问题?谢谢你的帮助!

1 个答案:

答案 0 :(得分:0)

没有来自Spring和/或Hibernate的日志很难猜测,但我会根据您提供的代码发布一些可能的原因:

  1. 您是否在8.0版中实际使用MySQL Connector / J?在旧版本(5.1)中,正确的驱动程序类为com.mysql.jdbc.Driver,8.0将其更改为com.mysql.cj.jdbc.Driver

  2. 您是否在构建工具(maven或gradle)中明确定义了MySQL Connector / J依赖项? Spring默认不会把它拉进去,只推荐一个版本。

  3. 您的JDBC URI中有一个额外的空格,并不确切知道这是否有用。

  4. 我建议在实体中使用java.sql.Timestamp类作为时间值,而不是Java 8 DateTime类型。 Java 8类型导致ORM解决方案存在很多问题。您可以直接在Java 8 Instant对象和Timestamp对象之间进行转换。这些将作为数字(例如bigint)存储在您的数据库中,因此不再需要列定义。