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踩坑:报错:

  1. 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 删除,也就是需要包括在内。
  2. 如果扫描不到你的dao包,加上**@EnableJpaRepositories(basePackages = “com.sophomoreblog.blog.dao”)**
  3. 一定要注意你的实体类中的@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注解,无法映射首字母大写属性的踩坑记录

JavaScript基础语法之 || 和 ?? 的踩坑记录

数据同步 相关的踩坑记录

使用ByteArrayOutputStream解决IO乱码问题的踩坑记录

unionId突然不能获取的踩坑记录

Uber使用Swift重写APP的踩坑经历及解决方案(转载)