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