精华内容
下载资源
问答
  • 2021-10-14 13:48:37
    application.yml 中新增
    spring:
      jpa:
        properties:
          hibernate:
            enable_lazy_load_no_trans: true  #避免hibernate懒加载,导致查询数据库失败
            format_sql: true  #格式化sql
        show-sql: true    #展示sql

    logback-spring.xml 中新增

    </configuration>
    <logger name="org.hibernate.type.descriptor.sql.BasicBinder" level="TRACE"/> </configuration>

    更多相关内容
  • 基本-jpa-example-javase 在 JavaSE 上使用 Java JPA 的基本示例
  • 原型-jpa 带有 JUnit 和 Derby 的 Java JPA 原型。 使用 JPA 和 Eclipse Link 进行数据库开发的基本结构。 使用 JUnit 和 Derby 在 maven 测试周期中测试 JPA 实体。
  • 针对spring boot 集成jpa sql操作进行自定义分库分表逻辑
  • java JPA 用法

    2013-11-27 10:39:38
    java jpa的使用方法做了一些描述。希望对大家有帮助
  • proyectofinal:proyecto java jpa
  • 整个大工程中从登录开始到查询数据库并显示,增删改查的一个小模块的完整实现
  • java jpa 视频教程

    2018-01-10 16:37:05
    java jpa 视频教程详解视频教程,完整版。附件是 txt 文件,内含网盘地址
  • 基于java jpa层实现mysql数据库的建表、新增、变更数据操作; 提供完整的jar包文件在根目录 下
  • Java JPA知识的理解与总结

    万次阅读 2016-03-07 14:36:00
    1. ORM映射元数据,JPA支持XML和JDK 5.0注解两种元数据的形式,元数据描述对象和表之间的映射关系,框架据此将实体对象持久化到数据库表中;  2. JPA的API,用来操作实体对象,执行CRUD操作,框架在后台替我们完成...

    一、对JPA的理解

    JPA的总体思想和现有Hibernate、TopLink,JDO等ORM框架大体一致。总的来说,JPA包括以下3方面的技术:
      1. ORM映射元数据,JPA支持XML和JDK 5.0注解两种元数据的形式,元数据描述对象和表之间的映射关系,框架据此将实体对象持久化到数据库表中;
      2. JPA的API,用来操作实体对象,执行CRUD操作,框架在后台替我们完成所有的事情,开发者从繁琐的JDBC和SQL代码中解脱出来。
      3. 查询语言,这是持久化操作中很重要的一个方面,通过面向对象而非面向数据库的查询语言查询数据,避免程序的SQL语句紧密耦合。

    二、JPA的主要API都定义在javax.persistence包中。与Hibernate对照如下:
    ————————————————–这里写图片描述

    三、实体生命周期

    描述了实体对象从创建到受控、从删除到游离的状态变换。对实体的操作主要就是改变实体的状态。
    这里写图片描述
    1.New,新创建的实体对象,没有主键(identity)值
    2.Managed,对象处于Persistence Context(持久化上下文)中,被EntityManager管理
    3.Detached,对象已经游离到Persistence Context之外,进入Application Domain
    4.Removed, 实体对象被删除
    EntityManager提供一系列的方法管理实体对象的生命周期,包括:
    1.persist, 将新创建的或已删除的实体转变为Managed状态,数据存入数据库。
    2.remove,删除受控实体
    3.merge,将游离实体转变为Managed状态,数据存入数据库。
    如果使用了事务管理,则事务的commit/rollback也会改变实体的状态。

    四、实体关系映射(ORM)

    1. 基本映射

    这里写图片描述
    2. ID生成策略
    ID对应数据库表的主键,是保证唯一性的重要属性。JPA提供了以下几种ID生成策略
    (1) GeneratorType.AUTO ,由JPA自动生成
    (2) GenerationType.IDENTITY,使用数据库的自增长字段,需要数据库的支持(如SQL Server、MySQL、DB2、Derby等)
    (3) GenerationType.SEQUENCE,使用数据库的序列号,需要数据库的支持(如Oracle)
    (4) GenerationType.TABLE,使用指定的数据库表记录ID的增长 需要定义一个TableGenerator,在@GeneratedValue中引用。例如:
    @TableGenerator( name=”myGenerator”, table=”GENERATORTABLE”, pkColumnName = “ENTITYNAME”, pkColumnValue=”MyEntity”, valueColumnName = “PKVALUE”, allocationSize=1 )

    @GeneratedValue(strategy = GenerationType.TABLE,generator=”myGenerator”)

    1. 关联关系
      JPA定义了one-to-one、one-to-many、many-to-one、many-to-many 4种关系。
      对于数据库来说,通常在一个表中记录对另一个表的外键关联;对应到实体对象,持有关联数据的一方称为owning-side,另一方称为inverse-side。
      为了编程的方便,我们经常会希望在inverse-side也能引用到owning-side的对象,此时就构建了双向关联关系。 在双向关联中,需要在inverse-side定义mappedBy属性,以指明在owning-side是哪一个属性持有的关联数据。
      对关联关系映射的要点如下:
      这里写图片描述
      其中 many-to-many关系的owning-side可以使用@JoinTable声明自定义关联表,比如Book和Author之间的关联表:
      @JoinTable(name = “BOOKAUTHOR”, joinColumns = { @JoinColumn(name = “BOOKID”, referencedColumnName = “id”) }, inverseJoinColumns = { @JoinColumn(name = “AUTHORID”, referencedColumnName = “id”) })
      关联关系还可以定制延迟加载和级联操作的行为(owning-side和inverse-side可以分别设置):
      通过设置fetch=FetchType.LAZY 或 fetch=FetchType.EAGER来决定关联对象是延迟加载或立即加载。
      通过设置cascade={options}可以设置级联操作的行为,其中options可以是以下组合:
      CascadeType.MERGE 级联更新
      CascadeType.PERSIST 级联保存
      CascadeType.REFRESH 级联刷新
      CascadeType.REMOVE 级联删除
      CascadeType.ALL 级联上述4种操作
    2. 继承关系
      JPA通过在父类增加@Inheritance(strategy=InheritanceType.xxx)来声明继承关系。A支持3种继承策略:
      (1) 单表继承(InheritanceType.SINGLETABLE),所有继承树上的类共用一张表,在父类指定(@DiscriminatorColumn)声明并在每个类指定@DiscriminatorValue来区分类型。
      (2) 类表继承(InheritanceType.JOINED),父子类共同的部分公用一张表,其余部分保存到各自的表,通过join进行关联。
      (3) 具体表继承(InheritanceType.TABLEPERCLASS),每个具体类映射到自己的表。
      其中1和2能够支持多态,但是1需要允许字段为NULL,2需要多个JOIN关系;3最适合关系数据库,对多态支持不好。具体应用时根据需要取舍。
    展开全文
  • jpa更新数据库中的两个字段,通过debug确认更新字段都成功传入,并且返回影响行数为1,但是数据库中的字段确未更新。改方法在service中有两处调用,其中一个可以正常更新,但是另一个却出现上述问题,令我十分困解...

    今天遇到一个离奇的bug,问题如下:

    用jpa更新数据库中的两个字段,通过debug确认更新字段都成功传入,并且返回影响行数为1,但是数据库中的字段确未更新。改方法在service中有两处调用,其中一个可以正常更新,但是另一个却出现上述问题,令我十分困解。。。

    在这里插入图片描述
    在这里插入图片描述

    后来在网上查找类似问题的解决方法,得以完美解决:

    修改如下:

    在这里插入图片描述

    只是设置了@Modifying(clearAutomatically = true),那么该注解的作用是什么?

    官方的解释如下:

    在这里插入图片描述

    文章大意:如果修改查询更改持久性上下文中包含的实体,则此上下文将过期。管理这种情况的一种方法是清除持久性上下文。通过这样做,我们可以确保持久性上下文下次将从数据库获取实体。但是,我们不必显式地调用EntityManager上的clear)方法。我们可以只使用来自@ modify注释的clearautomatic属性:修改(自动清除=正确)这样,我们可以确保在执行查询之后清除持久性上下文。

    也就是说该注解可以清除底层持久化上下文,就是entityManager这个类,我们知道jpa底层实现会有二级缓存,也就是在更新完数据库后,如果后面去用这个对象,你再去查这个对象,这个对象是在一级缓存,但是并没有跟数据库同步,这个时候用clearAutomatically=true,就会刷新hibernate的一级缓存了, 不然你在同一接口中,更新一个对象,接着查询这个对象,那么你查出来的这个对象还是之前的没有更新之前的状态。

    ******************

    追加:后期维护该段代码,发现再次出现了同样的问题,加上@ modify注释的clearautomatic属性也未解决,最终将update的sql换成了save才得以解决,但问题原因没有找到,初步判断可能和事务有关。。。。。。

    展开全文
  • 相信大家在用Java JPA作为ORM的时候都会有这种困惑,就是某个表T我仅仅希望取到其中的A、B、C三个字段,可是jpa是通过Entity Class映射的方式组合查询结果的。 那么如何通过使用JPA查询部分想要的内容,下面我把它做...

    前言

    相信大家在用Java JPA作为ORM的时候都会有这种困惑,就是某个表T我仅仅希望取到其中的A、B、C三个字段,可是jpa是通过Entity Class映射的方式组合查询结果的。
    那么如何通过使用JPA查询部分想要的内容,下面我把它做了一些通用的封装,供大家参考。痛快点,直接上代码!

    实现

    
    public interface BaseService<T,ID extends Serializable>  {
        
        List<Object[]> findAllByNavtiveSQLBase(String sql);
        
        Page<Object[]> findAllByNavtiveSQLPagingBase(String sql, Pageable pageable);
    }
    
    
    public abstract class BaseServiceImpl<T, ID extends Serializable> implements BaseService<T, ID>   {
    
        @Autowired
        protected BaseRepository<T, ID> baseRepository;
        @PersistenceContext(unitName="primaryPersistenceUnit")
        @Qualifier(value = "primaryDataSource")
        @Autowired
        protected EntityManager entityManager;
    
        @Override
        public List<Object[]> findAllByNavtiveSQLBase(String sql){
            try {
                Query query = entityManager.createNativeQuery(sql);
                @SuppressWarnings("unchecked")
                List<Object[]> list = query.getResultList();
                System.out.println("list.size() = " + list.size());
                entityManager.close();
                return list;
            } catch (RuntimeException ex) {
                throw ex;
            }
        }
        
        @Override
        public Page<Object[]> findAllByNavtiveSQLPagingBase(String sql, Pageable pageable){
            try {
                Query query = entityManager.createNativeQuery(sql);
                long total = query.getResultList().size();
    
                Iterator<Order> orders = pageable.getSort().iterator();
                String pageOrder = orders.hasNext() ? "order by" : "";
                while (orders.hasNext()) {
                    Order order = (Order) orders.next();
                    pageOrder += String.format(" %s %s%s", order.getProperty(), order.getDirection(), (orders.hasNext() ? ", " : ""));
                }
                
                int size = pageable.getPageSize();
                int begin = (pageable.getPageNumber() - 1) * size;
                String pageSql = String.format("%s %s limit %s, %s", sql, pageOrder, begin, size);
    
                System.out.println("pageSql = " + pageSql);
                query = entityManager.createNativeQuery(pageSql);
                @SuppressWarnings("unchecked")
                List<Object[]> list = query.getResultList();
    
                entityManager.close();
                return new PageImpl<Object[]>(list, pageable, total);
            } catch (RuntimeException ex) {
                throw ex;
            }
        }
    }
    
    
    
    @Service
    public class ServiceAttendanceRecordImpl extends BaseServiceImpl<AttendanceRecord,Integer> implements ServiceAttendanceRecord {
    
    }
    

    所有继承了BaseServiceImpl类的实现默认都有了通用的sql查询功能

    如何使用

    
    List<Object[]> list = serviceCompanyEntityImpl.findAllByNavtiveSQLBase("SELECT A, B, C FROM T");
            for (Object[] objects : list) {
                for (Object object : objects) {
    
                }
            }
    

    转载于:https://www.cnblogs.com/Romantic/p/5946403.html

    展开全文
  • 运行截图如下: 这里对应的数据库内容如下: 此处的关键代码如下: 通过sql语句去做,这里nativeQuery = true,这样就可以使用原始的sql语句了 其实真实的分页是这样的:limit (page – 1) * size , size ...
  • 使用java jpa操作数据库

    千次阅读 2019-06-22 17:01:30
    使用java jpa操作数据库 UserInfo类,要实现Serializable接口进行序列化。 import java.io.Serializable; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence....
  • java JPA 批注参考

    2009-05-07 16:48:46
    JPA 批注的详细说明文档,自己整理的。
  • java jpa的驱动类包

    2010-01-05 13:33:14
    Java Persistence API  JPA通过JDK 5.0注解或XML描述对象-关系表的映射关系,并将运行期的实体对象持久化到数据库中。
  • java JPA

    2012-07-02 22:13:16
    Java Persistence API (http://www.objectdb.com//api/java/jpa) ... Sun引入新的JPA ORM规范出于两个原因:其一,简化现有Java EE和Java SE应用的对象持久化的开发工作;其二,Sun希望整合对ORM技术,实现天下
  • java jpa自建表及简单使用

    千次阅读 2018-09-29 10:45:51
    -- jpa --&amp;gt; &amp;lt;dependency&amp;gt; &amp;lt;groupId&amp;gt;org.springframework.boot&amp;lt;/groupId&amp;gt; &amp;lt;artifactId&amp;gt;spring-bo
  • Java JPA技术

    千次阅读 2017-05-02 11:25:05
    Jpa(java persistenceapi)JAVA持久化API定义了对象-关系映射(ORM)以及实体对象持久化的标准接口。  JPA是EJB3.0规范的一部分,但是并不局限与EJB,可以作为POJO持久化的标准规范,可以脱离容器独立运行,开发,...
  • Java JPA 学习资料 合集

    2011-08-10 09:57:02
    JPA 规范部分详细的介绍了 JPA 中实体 Bean 的定义,并介绍了实体 Bean 支持的注释、全新的查询语言、实体管理接口、容器实现规范等内容。 JPA 标准制定过程中充分吸收了目前已经出现的所有持久化技术的所有优点,...
  • JPA 批注参考Java JPA

    2010-08-21 18:06:37
    JPA 批注参考 JPA 批注参考 JPA 批注参考
  • JPA 描述了使用 Java 管理应用程序中的关系数据。 JPAJava Persistence API)是持久性提供者实现的接口。 Hibernate 就是这样一种 JPA 实现。当您将 Hibernate 与 JPA 一起使用时,您实际上是在使用 Hibernate ...
  • Java中的JPA是什么意思?

    千次阅读 2020-08-03 09:07:46
    JPAJava Persistence API ),Java持久层API。 它可以通过注解(JDK5.0)或者XML的方式描述对象-关系表的映射关系,并将运行期的实体对象持久化到数据库中。 它为POJO提供持久化标准规范,Hibernate3.2+、...
  • Java JPA快速入门介绍

    万次阅读 2012-08-25 22:29:27
    JPA的英文全称是Java PersistenceAPI, 目的是给Java开发者提供对象关系映射工具用于在 Java应用程序开发中来管理关系数据(RDBMS)。JavaPersistence 包含下面三个部分: a. Java持久化API b. JPA查询语言 c. ...
  • JPA从入门到精通

    2018-07-27 17:55:41
    JPA的详细介绍,快速入门,同时对常见的数据访问层技术做了介绍和比对
  • java JPA 入门教程

    2009-09-17 22:01:55
    里面用实例讲解了JPA标签的作用,对初次接触JPA的人有很大的帮助
  • 什么是JPA

    千次阅读 2021-03-01 08:34:43
    JDBCjdbc是一组规范,是接口,由...而JPA是和jdbc类似的东西什么是JPAJava Persistence API:用于对象持久化的 APIJava EE 5.0 平台标准的 ORM 规范,使得应用程序以统一的方式访问持久层与JDBC类似,JPA统一了ja...
  • Spring整合JPA

    2019-01-06 15:44:26
    该案例基于Spring对JPA的集成,以后配置,在以后的SSSP框架中,可以使用词架构!
  • jpa实现数据库操作

    2019-03-08 18:47:45
    本实例仅仅是jpa对数据库的基础操作,在后续会将spring融入到项目中进行整合、后续版本将持续更新......
  • 设置默认值 @Column(name=&quot;state&quot;,columnDefinition=&quot;tinyint default 0&quot;) private Integer state=0; columnDefinition在创建表的时候...注解@org.hibernate.annotations...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 137,522
精华内容 55,008
关键字:

javajpa

java 订阅