广告
返回顶部
首页 > 资讯 > 后端开发 > Python >JPA配置详解之jpaProperties用法
  • 528
分享到

JPA配置详解之jpaProperties用法

2024-04-02 19:04:59 528人浏览 泡泡鱼

Python 官方文档:入门教程 => 点击学习

摘要

目录JPA配置之jpaPropertiesSpingDataJpa配置问题spring.jpa.properties.hibernate.hbm2ddl.auto=updateJPA

JPA配置之jpaProperties


<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="Http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xmlns:context="http://www.springframework.org/schema/context"
	xmlns:aop="http://www.springframework.org/schema/aop"
	xmlns:jpa="http://www.springframework.org/schema/data/jpa"
	xmlns:tx="http://www.springframework.org/schema/tx"
	xsi:schemaLocation="http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.1.xsd
		http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
		http://www.springframework.org/schema/data/jpa http://www.springframework.org/schema/data/jpa/spring-jpa-1.3.xsd
		http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.2.xsd
		http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.1.xsd">
	
	<!-- spring自动读取指定位置的配置为简到spring中 -->
	<context:property-placeholder location="classpath*:/application.properties"/>
	
	<context:component-scan base-package="com.shiroWEB">
		<!-- 扫描com.shiroweb包下除去@Controller以外注解的类 -->
		<context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
		<context:exclude-filter type="annotation" expression="org.springframework.web.bind.annotation.ControllerAdvice"/>
	</context:component-scan>
	
	<!-- c3p0数据源配置 -->
	<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
		<property name="driverClass" value="${jdbc.driver}"/>
		<property name="jdbcUrl" value="${jdbc.url}" />
		<property name="user" value="${jdbc.username}"/>
		<property name="passWord" value="${jdbc.password}"/>
	</bean>
	
	<!-- Jpa Entity Manager 配置 关联hibernateJpaVendorAdapter -->
	<bean id="entityManagerFactory" class="org.springframework.ORM.jpa.LocalContainerEntityManagerFactoryBean"> 
		<property name="dataSource" ref="dataSource"/>
		<property name="jpaVendorAdapter" ref="hibernateJpaVendorAdapter"/>
		<property name="packagesToScan" value="com.shiroweb"/>
		<!-- <property name="jpaProperties">
			<props>
				命名规则 My_NAME->MyName
				<prop key="hibernate.ejb.naming_strategy">org.hibernate.cfg.ImprovedNamingStrategy</prop>
				实体类对应数据库没有表 就生成一个表
				<prop key="hibernate.hbm2ddl.auto">update</prop>
			</props>
		</property> -->
		
		<!-- 指定JPA属性;如Hibernate中指定是否显示sql的是否显示、方言等 -->
		<property name="jpaProperties">
           <props>
               <!-- <prop key="hibernate.dialect">org.hibernate.dialect.oracle10gDialect</prop> -->
               <prop key="hibernate.ejb.naming_strategy">org.hibernate.cfg.ImprovedNamingStrategy</prop>
               <!-- <prop key="hibernate.cache.provider_class">org.hibernate.cache.NoCacheProvider</prop> -->
               <prop key="hibernate.show_sql">true</prop>
               <prop key="hibernate.format_sql">true</prop>
               <!-- <prop key="hibernate.hbm2ddl.auto">validate</prop> -->
               <prop key="hibernate.hbm2ddl.auto">update</prop>
           </props>
       </property>
	</bean>
	
	<!-- 配置hibernateJpaVendorAdapter关联数据源 -->
	<bean id="hibernateJpaVendorAdapter" class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter">
		<property name="database" value="Mysql" />  
        <property name="showSql" value="true" /> 
	</bean>
	
	<!-- Spring Data Jpa配置 -->
 	<jpa:repositories base-package="com.shiroweb"  transaction-manager-ref="transactionManager" entity-manager-factory-ref="entityManagerFactory"/>
   
	<!-- Jpa 事务配置 -->
	<bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager">
		<property name="entityManagerFactory" ref="entityManagerFactory"/>
	</bean>
 
	<!-- 使用annotation定义事务 -->
	<tx:annotation-driven transaction-manager="transactionManager" proxy-target-class="true" />
</beans>

其中jpaProperties是这是jpa的一些属性的


<!-- 指定JPA属性;如Hibernate中指定是否显示SQL的是否显示、方言等 -->
 <property name="jpaProperties">
           <props>
               <!-- <prop key="hibernate.dialect">org.hibernate.dialect.Oracle10gDialect</prop> -->
               <prop key="hibernate.ejb.naming_strategy">org.hibernate.cfg.ImprovedNamingStrategy</prop>
               <!-- <prop key="hibernate.cache.provider_class">org.hibernate.cache.NoCacheProvider</prop> -->
               <prop key="hibernate.show_sql">true</prop>
               <prop key="hibernate.format_sql">true</prop>
               <!-- <prop key="hibernate.hbm2ddl.auto">validate</prop> -->
               <prop key="hibernate.hbm2ddl.auto">update</prop>
           </props>
       </property>

这里有个属性为


<prop key="hibernate.hbm2ddl.auto">update</prop>

这是一个有用的设置

其实这个hibernate.hbm2ddl.auto参数的作用主要用于:自动创建|更新|验证数据库表结构。如果不是此方面的需求建议set value="none"。

  • create:每次加载hibernate时都会删除上一次的生成的表,然后根据你的model类再重新来生成新表,哪怕两次没有任何改变也要这样执行,这就是导致数据库表数据丢失的一个重要原因。
  • create-drop:每次加载hibernate时根据model类生成表,但是sessionFactory一关闭,表就自动删除。
  • update:最常用的属性,第一次加载hibernate时根据model类会自动建立起表的结构(前提是先建立好数据库),以后加载hibernate时根据 model类自动更新表结构,即使表结构改变了但表中的行仍然存在不会删除以前的行。要注意的是当部署到服务器后,表结构是不会被马上建立起来的,是要等 应用第一次运行起来后才会。
  • validate:每次加载hibernate时,验证创建数据库表结构,只会和数据库中的表进行比较,不会创建新表,但是会插入新值。

Sping Data Jpa配置问题

spring.jpa.properties.hibernate.hbm2ddl.auto=update

在配置spring data jpa时,如果spring.jpa.properties.hibernate.hbm2ddl.auto设置为update,会自动更新数据表结构,比如Entity中增加成员变量,数据表中也会增加相应的字段,但是需要注意的是,如果删除一个成员变量,这时数据表中不会自动删除对应的字段,如果删除的那个成员变量在数据表中被设置为not null,当再次运行时就会报错,如下面的例子

新建一个实体类


import lombok.Data;
import javax.persistence.*; 
@Entity
@Data
public class Car{ 
    @Id
    @Column(name="id", nullable = false)
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
 
    @Column(nullable = false)
    private String price;
 
    @Column
    private String color;
 
    @Column
    private String brand;
}

这时可以在数据库中看到已经自动生成数据表car,并且有对应的字段

这时我们删掉Car中的price,重新运行,我们再次查看数据库

发现还是存在price字段

以上为个人经验,希望能给大家一个参考,也希望大家多多支持编程网。

--结束END--

本文标题: JPA配置详解之jpaProperties用法

本文链接: https://www.lsjlt.com/news/157948.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作