联合主键与自动建表

当你使用了两个@Id的时候,就一定要使用jpa的联合主键方法规范,注:实体类不会限制@Id的数量写一万个也不会报错

@Entity
@Table(name = "download_info_notid")
@IdClass(DownloadURLPK.class)
public class DownloadURL {
    @Id
    @Column(name = "name")
    private String name;
    @Id
    @Column(name = "version")
    private String version;
    @Column(name = "url",columnDefinition = "varchar(1000)")
    private String url;

    private String sha256;
public class DownloadURLPK implements Serializable {
    private String name;
    private String version;
}
@Repository
public interface DownloadURLRepository extends JpaRepository<DownloadURL, DownloadURLPK> {
    DownloadURL findByNameIsAndVersionIs(String name,String version);
    List<DownloadURL> findByName(String name);
//    DownloadURL findById(int id);
}

这是一个示例,具体方法百度搜索


 

重要

jpa默认不会自动建表,如果你的数据库没有相应的表就会报什么,nosuchresultset的错误

yml配置文件,开启自动建表

server:
  port: 8888
spring:
  datasource:
    url: jdbc:mysql://192.168.0.120:3306/wyy?useUnicode=true&characterEncoding=utf-8&serverTimezone=GMT%2B8
    username: root
    password: 123456
    driver-class-name: com.mysql.cj.jdbc.Driver
  jpa:
    hibernate:
      ddl-auto: update

注意:有五个属性可以设置(create,update,create-drop,none,validate)

注意:update,不会去修改已经写好的表,比如,name字段你提前建好,是varchar(255)。这时即使你在实体类使用注解修改该字段类型,也不会起作用,还是varchar(255)

再举例:假如你提前建好一个字段名对应的,但是没有设置主键的表(mysql可以没有主键),这时即使对应实体类有两个@Id也不会生成主键,我遇到的就是这个问题

 再再举例:

@Column(name = "version",columnDefinition = " comment '版本'")

这时添加备注无效

遇到这种情况,想要达到每次都更新就要使用create属性,还未探究create属性的缺点

一步错,步步错,根本不知道到底哪一步错了,所以找起来很花时间,要一个一个找,所以每一步都要确保正确合规

 

posted on 2022-12-08 11:16  影子BLH  阅读(112)  评论(0)    收藏  举报