mysql - jpa设置ID为默认的@GeneratedValue,不能生成auto_increatement的表
高洛峰
高洛峰 2017-04-17 14:23:43
[MySQL讨论组]

jpa设置ID为默认的@GeneratedValue,不能生存auto_increatement的表,导致如果原表有内容,就出错,说主键重复。这是怎么回事呢?

hibernate 5.1.0

我的实体类:

@Table(name = "sssp_empoyee")
@Entity
public class Employee {

    private Integer id;
    private String lastName;
    private String email;

    @DateTimeFormat(pattern = "yyyy-MM-dd")
    private Date birth;
    private Date crateTime;
    private Department department;

    @GeneratedValue
    @Id
    public Integer getId() {

        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

我的spring设置:


        <property name="jpaProperties">
            <props>
                <prop key="hibernate.implicit_naming_strategy">legacy-jpa</prop>

                <prop key="hibernate.format_sql">true</prop>
                <prop key="hibernate.show_sql">true</prop>
                <prop key="hibernate.hbm2ddl.auto">update</prop>
                <prop key="hibernate.dialect">org.hibernate.dialect.MySQL5InnoDBDialect</prop>

                <prop key="hibernate.cache.use_query_cache">true</prop>
                <prop key="hibernate.cache.use_second_level_cache">true</prop>
                <prop key="hibernate.cache.region.factory_class">org.hibernate.cache.ehcache.EhCacheRegionFactory</prop>
            </props>
        </property>

        <property name="sharedCacheMode" value="ENABLE_SELECTIVE"/>
高洛峰
高洛峰

拥有18年软件开发和IT教学经验。曾任多家上市公司技术总监、架构师、项目经理、高级软件工程师等职务。 网络人气名人讲师,...

全部回复(1)
PHPz

我也遇到了这个问题,应该是看了尚硅谷的视频吧。

原因是因为hibernate5会将hibernate.id.new_generator_mappings的属性设置true

详情查看: https://hibernate.atlassian.n...

解决方法:
hibernate.id.new_generator_mappings设置为false

<bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
        <property name="dataSource" ref="dataSource"/>
        <property name="jpaVendorAdapter">
            <bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter"/>
        </property>
        <property name="packagesToScan" value="person.feng.core"/>
        <property name="jpaProperties">
            <props>

                <prop key="hibernate.dialect">org.hibernate.dialect.MySQL5InnoDBDialect</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>
                <prop key="hibernate.id.new_generator_mappings">false</prop>
            </props>
        </property>
        <!--二级缓存-->
        <property name="sharedCacheMode"  value="ENABLE_SELECTIVE" />
    </bean>

spring boot配置:


pring.jpa.hibernate.id.new_generator_mappings=true

查看:
http://stackoverflow.com/questions/38750580/set-hibernate-id-new-generator-mappings-in-application-yaml
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号