随笔 - 121  文章 - 30  评论 - 0  阅读 - 25420

联合主键与自动建表

当你使用了两个@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   影子BLH  阅读(106)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
· 三行代码完成国际化适配,妙~啊~
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

点击右上角即可分享
微信分享提示