Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在JavaHibernate中,可以通过对类的简单更改来更新数据库定义吗_Java_Hibernate - Fatal编程技术网

在JavaHibernate中,可以通过对类的简单更改来更新数据库定义吗

在JavaHibernate中,可以通过对类的简单更改来更新数据库定义吗,java,hibernate,Java,Hibernate,使用Java和hibernate,我想知道是否可以在创建后更改数据库定义,只需更改现有的实体类即可。更改是否会反映在数据库中???可能吗???我试过了,但失败了。我试过了 <property name="hibernate.hbm2ddl.auto">update</property> 更新 但如果仍然有可能出现错误,下面是我的代码 /** * Description of bankbranchcontactdetailsBean * * @author Vis

使用Java和hibernate,我想知道是否可以在创建后更改数据库定义,只需更改现有的实体类即可。更改是否会反映在数据库中???可能吗???我试过了,但失败了。我试过了

<property name="hibernate.hbm2ddl.auto">update</property>
更新
但如果仍然有可能出现错误,下面是我的代码

/**
 * Description of bankbranchcontactdetailsBean
 *
 * @author Vishal Jain @ TurtleTec Inc.
 */
package com.beans;

import javax.persistence.Entity;
import javax.persistence.Table;
import javax.persistence.TableGenerator;
import javax.persistence.Id;
import javax.persistence.Column;
import javax.persistence.Temporal;
import javax.persistence.UniqueConstraint;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import java.io.Serializable;
import java.util.Date;

@Entity(name = "bankbranchcontactdetails")
@Table(name = "bankbranchcontactdetails", schema = "stserptest", uniqueConstraints = { @UniqueConstraint(columnNames = "BankBranchContactId") })
@TableGenerator(name = "bankbranchcontactdetailsgen", table = "bankbranchcontactdetails", pkColumnName = "BankBranchContactId")
public class bankbranchcontactdetailsBean extends SuperBeanClass implements
        SuperBeanInterface, Serializable {

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    @Column(columnDefinition = "INT(10) UNSIGNED", name = "BankBranchContactId", precision = 10, scale = 0, nullable = false, unique = true)
    private Integer Id;

    @Column(columnDefinition = "INT(10) UNSIGNED", name = "BankBranchId", precision = 10, scale = 0, nullable = false)
    private Integer _BankBranchId;

    @Column(columnDefinition = "ENUM('PHONE','MOBILE','FAX','TELEX')", name = "ContactTypeModified", length = 6, nullable = false)
    private String _ContactTypeModified;

    @Column(columnDefinition = "VARCHAR(20)", name = "Contact", length = 20, nullable = false)
    private String _Contact;

    @Column(columnDefinition = "INT(10) UNSIGNED", name = "NewField", precision = 10, scale = 0, nullable = true)
    private Integer _NewField;

    public bankbranchcontactdetailsBean() {

        _BankBranchId = 0;
        _ContactType = "";
        _Contact = "";
        _NewField = 0;
    }

    public bankbranchcontactdetailsBean(Integer __BankBranchId,
            String __ContactTypeModified String __Contact, Integer __MyCompanyId) {

        _BankBranchId = __BankBranchId;
        _ContactTypeModified = __ContactTypeModified;
        _Contact = __Contact;
        _MyCompanyId = __MyCompanyId;
    }

    public int getBankBranchContactId() {
        return Id;
    }

    public Integer getBankBranchId() {
        return _BankBranchId;
    }

    public String getContactType() {
        return _ContactTypeModified;
    }

    public String getContact() {
        return _Contact;
    }

    public Integer getNewField() {
        return _NewField;
    }

    public void setBankBranchContactId(int NewValue) {
        Id = NewValue;
    }

    public void setBankBranchId(Integer NewValue) {
        _BankBranchId = NewValue;
    }

    public void setContactType(String NewValue) {
        _ContactTypeModified = NewValue;
    }

    public void setContact(String NewValue) {
        _Contact = NewValue;
    }

    public void setNewField(Integer NewValue) {
        _NewField = NewValue;
    }

}




<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
    <session-factory>
        <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
        <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
        <property name="hibernate.connection.url">jdbc:mysql://localhost:3306/mysql?zeroDateTimeBehavior=convertToNull</property>
        <property name="hibernate.connection.username">root</property>
        <property name="hibernate.connection.password">V32</property>
        <property name="hibernate.default_schema">stserptest</property>
        <property name="hibernate.hbm2ddl.auto">update</property>
            <property name="hibernate.archive.autodetection">class</property>
            <property name="hibernate.show_sql">true</property>
            <property name="hibernate.format_sql">true</property>

        <mapping class="com.stserp.beans.bankbranchcontactdetailsBean" />

    </session-factory>
</hibernate-configuration>



/**
 * Description of ManagerClass
 *
 * @author Vishal Jain 
 */
package com.beans;

import java.util.ArrayList;

import javax.swing.JOptionPane;

import org.hibernate.HibernateException;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
import org.hibernate.service.ServiceRegistry;
import org.hibernate.service.ServiceRegistryBuilder;

public class ManagerClass {

    private static SessionFactory factory = null;
    private static ManagerClass _ManagerClass = null;

    public static SessionFactory createSessionFactory() {
        SessionFactory sessionFactory;
        Configuration configuration = new Configuration();
        configuration.configure();
        ServiceRegistry serviceRegistry = new ServiceRegistryBuilder()
                .applySettings(configuration.getProperties())
                .buildServiceRegistry();
        sessionFactory = configuration.buildSessionFactory(serviceRegistry);
        return sessionFactory;
    }

    public static SessionFactory getSessionFactory() {
        return factory;
    }

    public static ManagerClass getInstance() throws ExceptionInInitializerError {
        try {
            if (factory == null) {
                factory = createSessionFactory();
            }
            if (_ManagerClass == null) {
                _ManagerClass = new ManagerClass();
            }
        } catch (Throwable ex) {
            JOptionPane.showMessageDialog(
                    null,
                    "Failed to create sessionFactory object...\n"
                            + ex.getMessage(), "Error...", 0);
            throw new ExceptionInInitializerError(ex);
        } finally {
            return _ManagerClass;
        }
    }

    public ArrayList<Integer> SaveBeansList(Session session, String entityName,
            ArrayList<? extends SuperBeanClass> BeansList)
            throws HibernateException {
        ArrayList<Integer> IDs = null;
        try {
            IDs = new ArrayList<Integer>();
            for (SuperBeanClass element : BeansList) {
                IDs.add((Integer) session.save(entityName, element));
            }
        } catch (HibernateException e) {
            throw e;
        }
        return IDs;
    }

    public ArrayList<? extends SuperBeanClass> LoadTable(Session session,
            String TableName) throws HibernateException {
        ArrayList<? extends SuperBeanClass> beansList = null;
        try {
            beansList = (ArrayList<? extends SuperBeanClass>) session
                    .createQuery("FROM " + TableName).list();
        } catch (HibernateException e) {
            throw e;
        }
        return beansList;
    }

    public ArrayList<?> LoadConditional(Session session, String _query)
            throws HibernateException {
        ArrayList<?> beansList = null;
        try {
            beansList = (ArrayList<? extends SuperBeanClass>) session
                    .createQuery(_query).list();
        } catch (HibernateException e) {
            throw e;
        }
        return beansList;
    }

    public SuperBeanInterface LoadById(Session session, Class className,
            Integer ID) throws HibernateException {
        SuperBeanInterface BeanInterface = null;
        try {
            BeanInterface = (SuperBeanInterface) session.get(className, ID);
        } catch (HibernateException e) {
            throw e;
        }
        return BeanInterface;
    }

    public void DeleteById(Session session, Class className, Integer ID)
            throws HibernateException {
        try {
            session.delete(session.get(className, ID));
        } catch (HibernateException e) {
            throw e;
        }
    }
}




/**
 * Description of SuperBeanClass
 *
 * @author Vishal Jain 
 */
package com.beans;

public class SuperBeanClass {
    public SuperBeanClass() {
    }
}



/**
 * Description of SuperBeanInterface
 *
 * @author Vishal Jain 
 */
package com.beans;

public interface SuperBeanInterface {
}
/**
*bankbranchcontactdetailsBean的说明
*
*@作者Vishal Jain@TurtleTec公司。
*/
包com.beans;
导入javax.persistence.Entity;
导入javax.persistence.Table;
导入javax.persistence.TableGenerator;
导入javax.persistence.Id;
导入javax.persistence.Column;
导入javax.persistence.Temporal;
导入javax.persistence.UniqueConstraint;
导入javax.persistence.GeneratedValue;
导入javax.persistence.GenerationType;
导入java.io.Serializable;
导入java.util.Date;
@实体(名称=“bankbranchcontactdetails”)
@表(name=“bankbranchcontactdetails”,schema=“stserptest”,uniqueConstraints={@UniqueConstraint(columnNames=“BankBranchContactId”)})
@TableGenerator(name=“bankbranchcontactdetailsgen”,table=“bankbranchcontactdetails”,pkColumnName=“BankBranchContactId”)
公共类bankbranchcontactdetailsBean扩展SuperBeanClass实现
超级BeanInterface,可序列化{
@身份证
@GeneratedValue(策略=GenerationType.AUTO)
@列(columnDefinition=“INT(10)UNSIGNED”,name=“BankBranchContactId”,精度=10,标度=0,可空=false,唯一=true)
私有整数Id;
@列(columnDefinition=“INT(10)UNSIGNED”,name=“BankBranchId”,精度=10,比例=0,可空=false)
私有整数_bankbranchhid;
@列(columnDefinition=“ENUM('PHONE'、'MOBILE'、'FAX'、'TELEX')”,name=“ContactTypeModified”,长度=6,空值=false)
私有字符串\u ContactTypeModified;
@列(columnDefinition=“VARCHAR(20)”,name=“Contact”,length=20,nullable=false)
私人字符串\u联系人;
@列(columnDefinition=“INT(10)UNSIGNED”,name=“NewField”,精度=10,比例=0,可空=true)
私有整数_NewField;
公共银行分行联系人详细信息Bean(){
_BankBranchId=0;
_ContactType=“”;
_联系人=”;
_NewField=0;
}
public bankbranchcontactdetailsBean(整型),
字符串_联系人类型修改字符串_联系人,整数_公司ID){
_BankBranchId=uu BankBranchId;
_ContactTypeModified=\uu ContactTypeModified;
_触点=_触点;
_MyCompanyId=\uu MyCompanyId;
}
public int getBankBranchContactId(){
返回Id;
}
公共整数getBankBranchId(){
返回(BankBranchId);;
}
公共字符串getContactType(){
return\u ContactTypeModified;
}
公共字符串getContact(){
返回(u)联系人;;
}
公共整数getNewField(){
return_NewField;
}
public void setBankBranchContactId(int NewValue){
Id=新值;
}
public void setbankbranchhid(整型NewValue){
_BankBranchId=NewValue;
}
public void setContactType(字符串NewValue){
_ContactTypeModified=新值;
}
public void setContact(字符串NewValue){
_联系人=新值;
}
public void setNewField(整型NewValue){
_NewField=NewValue;
}
}
org.hibernate.dialogue.mysqldialogue
com.mysql.jdbc.Driver
jdbc:mysql://localhost:3306/mysql?zeroDateTimeBehavior=convertToNull
根
V32
斯特尔普泰斯特
使现代化
班
符合事实的
符合事实的
/**
*ManagerClass的说明
*
*@作者Vishal Jain
*/
包com.beans;
导入java.util.ArrayList;
导入javax.swing.JOptionPane;
导入org.hibernate.hibernateeexception;
导入org.hibernate.Session;
导入org.hibernate.SessionFactory;
导入org.hibernate.cfg.Configuration;
导入org.hibernate.service.ServiceRegistry;
导入org.hibernate.service.ServiceRegistryBuilder;
公共类管理器类{
私有静态SessionFactory=null;
私有静态ManagerClass _ManagerClass=null;
公共静态SessionFactory createSessionFactory(){
会话工厂会话工厂;
配置=新配置();
configure.configure();
ServiceRegistry ServiceRegistry=新ServiceRegistryBuilder()
.applySettings(configuration.getProperties())
.buildServiceRegistry();
sessionFactory=configuration.buildSessionFactory(serviceRegistry);
返回工厂;
}
公共静态SessionFactory getSessionFactory(){
返回工厂;
}
public static ManagerClass getInstance()抛出ExceptionInInitializeError{
试一试{
如果(工厂==null){
factory=createSessionFactory();
}
如果(_ManagerClass==null){
_ManagerClass=新的ManagerClass();
}
}捕获(可丢弃的ex){
JOptionPane.showMessageDialog(
无效的
“未能创建sessionFactory对象…\n”
+例如,getMessage(),“错误…”,0);
抛出新异常InInitializeRerror(ex);
}最后{
返回管理器类;
}
}
public ArrayList SaveBeansList(会话会话、字符串entityName、,
如果将数据库结构设置为更新模式,ArrayListHibernate可以修改它

<property name="hbm2ddl.auto">update</property>
更新
不过,最好使用类似或的东西,以便随着时间的推移跟踪表的版本控制

根据我的经验,依靠hibernate保持模式与实体模型的同步从长远来看是行不通的,尤其是在项目中有任何分支的情况下
<property name="hbm2ddl.auto">update</property>