JPA,Hibernate框架使用的踩坑记录和使用的一些细节问题
Posted SmallCuteMonkey
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JPA,Hibernate框架使用的踩坑记录和使用的一些细节问题相关的知识,希望对你有一定的参考价值。
package com.sophomoreblog.blog;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.autoconfigure.domain.EntityScan;
import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration;
import org.springframework.boot.autoconfigure.orm.jpa.HibernateJpaAutoConfiguration;
import org.springframework.data.jpa.repository.config.EnableJpaRepositories;
@EntityScan("com.sophomoreblog.blog.po")
//@EnableAutoConfiguration
//@MapperScan("com.sophomoreblog.blog.dao")
@EnableJpaRepositories(basePackages = "com.sophomoreblog.blog.dao")
@SpringBootApplication(exclude = {DataSourceAutoConfiguration.class, HibernateJpaAutoConfiguration.class})
public class BlogApplication {
public static void main(String[] args) {
SpringApplication.run(BlogApplication.class, args);
}
}
使用Jpa踩坑:报错:
- Field userRepository in com.sophomoreblog.blog.service.serviceimpl.UserServiceimpField userRepository in com.sophomoreblog.blog.service.serviceimpl.UserServiceimpl required a bean named ‘entityManagerFactory’ that could not be found.
把@SpringBootApplication 里面的exclude 删除,也就是需要包括在内。 - 如果扫描不到你的dao包,加上**@EnableJpaRepositories(basePackages = “com.sophomoreblog.blog.dao”)**
- 一定要注意你的实体类中的@Entity,@Table,@Id 都是来自
import javax.persistence.*;
4. 然后需要注意application.yml里面的Jpa的配置是否正确,数据源的配置是否正确
5. @Entity(name = “t_comment”) 这个是Jpa的新版的配置,你需要注意,它相当于 @Entity @Table(name=“t_comment”)这两个配置
jpa:
database: mysql
#可以在日志中进行显示你的sql的执行的语句
show-sql: true
#根据你的实体类进行更新,如果字段名什么的有更改会进行同步
#create 会清空数据重新进行表的创建,小心会丢掉数据
#none 如果你的数据库已经确定下来你可以使用这个
hibernate:
ddl-auto: update
刚刚操作了一把 hibernate: ddl-auto: create:然后所有的数据都被清空,所有的表都重新创建也一次。
如图:
Blog实体类:
package com.sophomoreblog.blog.po;/*
*@author 侯治聪
*@created 2020/10/3-16:43
*
*/
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import javax.persistence.*;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
@Data
@AllArgsConstructor
@NoArgsConstructor
//新版的这样用 老版的两个注解分开了 @Entity 和@Table(name="t_blog")
@Entity(name = "t_blog")
//@Table
public class Blog {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String title;
private String content;//内容
private String firstPicture;//首图
private String flag;//原创还是转载
private Integer views;//阅读量
private boolean appreciation;//赞赏开启
private boolean shareStatement;//分享权限
private boolean commentabled;//评论是否开启
private boolean published;//是否发布
private boolean recommend;//是否推荐
@Temporal(TemporalType.TIMESTAMP)
private Date createTime;
@Temporal(TemporalType.TIMESTAMP)
private Date updateTime;
//一个分类有多个博客
@ManyToOne
private Type type;
//一个标签有多个博客,一个博客有多个标签
@ManyToMany(cascade = {CascadeType.PERSIST})
private List<Tag> tags = new ArrayList<>();
@ManyToOne
private User user;
@OneToMany(mappedBy = "blog")
private List<Comment> comments = new ArrayList<>();
private String description;
}
以上是关于JPA,Hibernate框架使用的踩坑记录和使用的一些细节问题的主要内容,如果未能解决你的问题,请参考以下文章
使用Spring的@RequestBody注解,无法映射首字母大写属性的踩坑记录