当你使用了两个@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属性的缺点
一步错,步步错,根本不知道到底哪一步错了,所以找起来很花时间,要一个一个找,所以每一步都要确保正确合规
标签:建表,String,private,Id,version,自动,主键,name From: https://www.cnblogs.com/wYYBLH/p/16965576.html