mysql - 当我更改实体字段的大小时,它在数据库中没有更改

标签 mysql hibernate jpa

我有一个实体类组。

更改前

@Entity
@Table(name = "Group")

public class Group implements Serializable {

    private static final long serialVersionUID = 1L;

    private Long id;
    private String name;


    @Deprecated
    public Group() {
        // Do not Use. Required by JPA Spec
    }

    public Group(Long id) {
        this.id = id;
    }

    @Id
    public Long getId() {
        return id;
    }

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

    @NotNull
    @Size(min = 2, max = 75)
    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    @Override
    public boolean equals(Object o) {
        if (o instanceof User) {
            return getId().equals(((Group) o).getId());
        }
        else {
            return false;
        }
    }

现在我将名称的最大大小从 75 更改为 1000。

@Entity
@Table(name = "Group")

public class Group implements Serializable {

    private static final long serialVersionUID = 1L;

    private Long id;
    private String name;


    @Deprecated
    public Group() {
        // Do not Use. Required by JPA Spec
    }

    public Group(Long id) {
        this.id = id;
    }

    @Id
    public Long getId() {
        return id;
    }

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

    @NotNull
    @Size(min = 2, max = 1000)
    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    @Override
    public boolean equals(Object o) {
        if (o instanceof User) {
            return getId().equals(((Group) o).getId());
        }
        else {
            return false;
        }
    }

进行此更改后,数据库中的名称长度不会从 75 更改为 1000。

persistance.xml 看起来像

<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.1"
    xmlns="http://xmlns.jcp.org/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/persistence http://xmlns.jcp.org/xml/ns/persistence/persistence_2_1.xsd">
    <persistence-unit name="primary" transaction-type="JTA">
        <jta-data-source>java:jboss/datasources/sampleDS</jta-data-source>
        <properties>
            <property name="hibernate.hbm2ddl.auto" value="update" />
            <property name="hibernate.show_sql" value="true" />
            <property name="hibernate.format_sql" value="true" />
        </properties>
    </persistence-unit>
</persistence>

最佳答案

Hibernate 的架构更新功能 (hibernate.hbm2ddl.auto=update) 非常有限,不能依赖。它将添加新表、字段和外键,但仅此而已。

如果您的架构发生更改,您将需要某种迁移机制,例如 Liquibase 。在生产中依赖 Hbm2ddl 会导致灾难。

关于mysql - 当我更改实体字段的大小时,它在数据库中没有更改,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29296796/

相关文章:

mysql - SQL 在我的用户表上每个季度+年的增长

mysql - Spring JPA 生成带有 "(? in (.))"的查询

mysql - openshift平台无法连接MYSQL数据库

java - JPA Criteria OneToMany 相同实体类型过滤条件

java - 如何在 GWT 项目中使用 JPA (Hibernate) 连接到 MySQL 数据库?

java - 获取今天日期的所有优惠

mysql - Dejavu - Python 中的音频指纹识别

mysql - 在 SQL 选择中放置空格

java - 如何使用 Spring 异常处理 POST REST 正确的错误状态代码

mysql - 无法在线访问MySQL