V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
ukipoi
V2EX  ›  Java

请教一下 Spring JPA 的问题

  •  
  •   ukipoi · 2018-12-17 12:32:45 +08:00 · 2306 次点击
    这是一个创建于 2170 天前的主题,其中的信息可能已经有所发展或是发生改变。

    刚开始学习,第一次使用 JPA。
    按照 spring 官网的 Guides 搭建了一个项目。
    引用了 JPA 和 MYSQL

    dependencies {
        implementation('org.springframework.boot:spring-boot-starter-data-jpa')
        implementation('org.springframework.boot:spring-boot-starter-data-rest')
        implementation('org.springframework.boot:spring-boot-starter-web')
        runtimeOnly('mysql:mysql-connector-java')
        testImplementation('org.springframework.boot:spring-boot-starter-test')
    }
    

    创建了实体类,同时在 mysql 里创建了对应的表。

    @Entity
    @Table(name = "demo")
    public class Demo {
    
        @Id
        @GeneratedValue(strategy= GenerationType.AUTO)
        private Long id;
        private String name;
        private String loginname;
        private String loginpwd;
    
        protected Demo(){}
    
        public Demo(String name, String loginname, String loginpwd) {
            this.name = name;
            this.loginname = loginname;
            this.loginpwd = loginpwd;
        }
    }
    

    启动的时候报"Table 'DATABASE.hibernate_sequence' doesn't exist"的错误。
    经过了解,我认为是实体类 @GenerateValue 设置的原因,应该是 GenerationType.AUTO 实际设置的类型是 TABLE,Spring 使用的 JPA 实现生成一个 hibernate_sequences 表,因为这个表不存在所以报错了。
    把"strategy= GenerationType.AUTO"改成"GenerationType.IDENTITY"是可以解决
    不过我现在有这么几个问题:

    1. Spring JPA 默认的实现是 Hibernate 吗?
    2. 如果我想使用 AUTO 的设置,是必须要手动创建 hibernate_sequence 表吗?可以让 JPA 自动创建吗?

    剩下一个小白一点的问题:
    关于 application.properties,有关于这个东西的讲解么?比如 spring.datesource 的配置、把文件改名启动类还能正常加载么 这样的问题。我发现我真的一点也不知道这个配置文件的信息,它是如何工作的、为什么使用网络上的配置就可以设置数据库地址。
    8 条回复    2018-12-17 14:53:48 +08:00
    ukipoi
        1
    ukipoi  
    OP
       2018-12-17 12:33:59 +08:00
    啊,最后问题那里是 JPA
    ukipoi
        2
    ukipoi  
    OP
       2018-12-17 12:35:36 +08:00
    @ukipoi
    才发现主题是可以编辑的 0.0
    chocotan
        3
    chocotan  
       2018-12-17 12:49:25 +08:00   ❤️ 2
    spring.jpa.hibernate.ddl-auto 设成 create 或者 update
    application.properties 是 spring-boot 的配置文件
    liuxey
        4
    liuxey  
       2018-12-17 12:57:19 +08:00
    了解下:GenerationType,如果你主键 mysql 自增,用 IDENTITY,

    这里错误明确的告诉你 hibernate_sequence 不存在,AUTO 用了表来记录你的主键值
    liuxey
        5
    liuxey  
       2018-12-17 12:58:48 +08:00
    Spring JPA hibernate 实现是众多实现里最“好”的,
    luosuosile
        6
    luosuosile  
       2018-12-17 13:28:44 +08:00
    现在看到一堆 jpa,jpa 比 ibatis 流行吗
    Edsie
        7
    Edsie  
       2018-12-17 13:45:46 +08:00
    Jpa 可以帮你自动建表的,按照三楼设置好,你只需要写好实体类就行。
    walter211
        8
    walter211  
       2018-12-17 14:53:48 +08:00
    @Edsie 我喜欢写好表,自动生成类……因为产品是给字段的……
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3090 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 14:06 · PVG 22:06 · LAX 06:06 · JFK 09:06
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.