2016-04-13 10 views
0

私はHibernateを使ってPostgresの2つのテーブルにデータを永続させていますが、最近テーブル構造を変更しました。私は、Javaコードを実行しようとしました。これは、休止状態が常に古いテーブル構造を探していることを理解しました。確かに、私はDBMSの古いテーブルを削除することにしましたが、まだ休止状態は古いテーブルの構造を探しています。実際には、フィールドはもはや最新のデザインでは存在しないため、これに気付きました。私の質問は、これをHibernateで更新する方法はありますか?どこを探しますか? Eclipse Marsを使用しています。プロジェクトをクリーンアップして再起動しますが、それでも同じです。はテーブル構造に変更されましたが、hibernateはそれを更新しません

ここでは私のHibernateUtil.javaがある

enter code here 
<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE hibernate-configuration PUBLIC 
"=//Hibernate/Hibernate Configuration DTD 3.0//EN" 
"http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd"> 
<hibernate-configuration> 
<session-factory> 
<!-- Database connection settings --> 
<property name="connection.driver.class">org.postgresql.Driver</property> 
<property name="connection.url">jdbc:postgresql://localhost:5432/cineticket2</property> 
<property name="connection.username">ok</property> 
<property name="connection.password">ok123$</property> 

<!-- SQL Dialect --> 
<property name="dialect">org.hibernate.dialect.PostgreSQLDialect</property> 

<!-- Echo all executed SQL to stdout --> 
<property name="show_sql">true</property> 

<mapping class="sv.edu.ucad.et1.cineticket.data.entities.Usuarios"/> 
<mapping class="sv.edu.ucad.et1.cineticket.data.entities.Cargos"/> 
<mapping class="sv.edu.ucad.et1.cineticket.data.entities.Departamentos"/> 

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

私のhibernate.cfg.xmlのです:

package sv.edu.ucad.et1.cineticket.data; 
import org.hibernate.SessionFactory; 
import org.hibernate.boot.Metadata; 
import org.hibernate.boot.MetadataSources; 
import org.hibernate.boot.registry.StandardServiceRegistry; 
import org.hibernate.boot.registry.StandardServiceRegistryBuilder; 
import org.hibernate.cfg.Configuration; 
import sv.edu.ucad.et1.cineticket.data.entities.Cargos; 

public class HibernateUtil { 
private static final SessionFactory sessionFactory = buildSessionFactory(); 

private static SessionFactory buildSessionFactory() { 
    try{ 
     //Configuration configuration = new Configuration(); 
     //return configuration.buildSessionFactory(new StandardServiceRegistryBuilder().applySettings(configuration.getProperties()).build()); 
     StandardServiceRegistry ssr = new StandardServiceRegistryBuilder().configure("hibernate.cfg.xml").build(); 
     Metadata mdata = new MetadataSources(ssr).getMetadataBuilder().build(); 
     return mdata.getSessionFactoryBuilder().build(); 
    }catch(Exception e){ 
     e.printStackTrace(); 
     throw new RuntimeException("Ocurrio un error en la construcction de la Sesion Factory"); 
    } 
}//fin de buildSessionfactory 

public static SessionFactory getSessionFactory(){ 
    return sessionFactory; 
} 

}//fin de HibernateUitl 

ここでは、これは私である私のDepartamentos.java

package sv.edu.ucad.et1.cineticket.data.entities; 
import java.util.ArrayList; 
import java.util.List; 
import javax.persistence.Access; 
import javax.persistence.AccessType; 
import javax.persistence.CascadeType; 
import javax.persistence.Column; 
import javax.persistence.Entity; 
import javax.persistence.GeneratedValue; 
import javax.persistence.GenerationType; 
import javax.persistence.Id; 
import javax.persistence.JoinColumn; 
import javax.persistence.OneToMany; 
import javax.persistence.Table; 
import javax.persistence.Transient; 
@Entity 
@Table(name="departamentos") 
@Access(value=AccessType.PROPERTY) //acceso a traves de getters 

public class Departamentos { 
private Long coddep; 
private String nomdep; 
private String desdep; 
private boolean estdep; 

@Id 
@GeneratedValue(strategy=GenerationType.IDENTITY) 
@Column(name="coddep", updatable=false)  
public Long getCoddep() { 
    return coddep; 
} 
public void setCoddep(Long coddep) { 
    this.coddep = coddep; 
} 

@Column(name="nomdep", nullable=false)  
public String getNomdep() { 
    return nomdep; 
} 
public void setNomdep(String nomdep) { 
    this.nomdep = nomdep; 
} 

@Column(name="desdep", nullable=false)  
public String getDesdep() { 
    return desdep; 
} 
public void setDesdep(String desdep) { 
    this.desdep = desdep; 
} 

@Column(name="estdep", nullable=false)  
public boolean isEstdep() { 
    return estdep; 
} 
public void setEstdep(boolean estdep) { 
    this.estdep = estdep; 
} 
} 

ですUsuarios.java

package sv.edu.ucad.et1.cineticket.data.entities; 
import java.util.Date; 
import javax.persistence.Access; 
import javax.persistence.AccessType; 
import javax.persistence.CascadeType; 
import javax.persistence.Column; 
import javax.persistence.Entity; 
import javax.persistence.GeneratedValue; 
import javax.persistence.GenerationType; 
import javax.persistence.Id; 
import javax.persistence.JoinColumn; 
import javax.persistence.ManyToOne; 
import javax.persistence.OneToMany; 
import javax.persistence.OneToOne; 
import javax.persistence.Table; 
import javax.persistence.Transient; 

@Entity 
@Table(name="usuarios") 
@Access(value=AccessType.PROPERTY) //acceso a traves de getters 
public class Usuarios { 

private Long codusu; 
private String apeusu; 
private String nomusu; 
private String celusu; 
private String dirusu; 
private Date fcousu; 
private String cueusu; 
private String clausu; 
private Long codsuc; 
private Long codcar; 

@OneToMany(cascade=CascadeType.ALL) 
@JoinColumn(name="coddep") 
public Departamentos deptos;  

@Transient 
public Departamentos getDeptos() { 
    return deptos; 
} 
public void setDeptos(Departamentos deptos) { 
    this.deptos = deptos; 
} 

//propiedad bandera, que se declara como @Transient 
private boolean estado; 

@Transient 
public boolean isEstado() { 
    return estado; 
} 
public void setEstado(boolean estado) { 
    this.estado = estado; 
} 


@Id 
@GeneratedValue(strategy=GenerationType.IDENTITY) 
@Column(name="codusu", updatable=false) 
public Long getCodusu() { 
    return codusu; 
} 
public void setCodusu(Long codusu) { 
    this.codusu = codusu; 
} 

@Column(name="apeusu", nullable=false)  
public String getApeusu() { 
    return apeusu; 
} 
public void setApeusu(String apeusu) { 
    this.apeusu = apeusu; 
} 

@Column(name="nomusu", nullable=false)  
public String getNomusu() { 
    return nomusu; 
} 
public void setNomusu(String nomusu) { 
    this.nomusu = nomusu; 
} 

@Column(name="celusu", nullable=false)  
public String getCelusu() { 
    return celusu; 
} 
public void setCelusu(String celusu) { 
    this.celusu = celusu; 
} 

@Column(name="dirusu")  
public String getDirusu() { 
    return dirusu; 
} 
public void setDirusu(String dirusu) { 
    this.dirusu = dirusu; 
} 

@Column(name="cueusu", nullable=false)  
public String getCueusu() { 
    return cueusu; 
} 
public void setCueusu(String cueusu) { 
    this.cueusu = cueusu; 
} 

@Column(name="clausu", nullable= false)  
public String getClausu() { 
    return clausu; 
} 
public void setClausu(String clausu) { 
    this.clausu = clausu; 
} 

public Long getCodsuc() { 
    return codsuc; 
} 
public void setCodsuc(Long codsuc) { 
    this.codsuc = codsuc; 
} 

@Column(name="codsal", nullable=false)  
public Long getCodsal() { 
    return codsuc; 
} 
public void setCodsal(Long codsal) { 
    this.codsuc = codsal; 
} 

@Column(name="codcar", nullable=false) 
public Long getCodcar() { 
    return codcar; 
} 
public void setCodcar(Long codcar) { 
    this.codcar = codcar; 
} 

@Column(name="fcousu") 
public Date getFcousu() { 
    return fcousu; 
} 
public void setFcousu(Date fcousu) { 
    this.fcousu = fcousu; 
} 

}//fin de Usuarios 

これはメインクラスです:

package sv.edu.ucad.et1.cineticket.data; 

import java.util.Date; 
import org.hibernate.Session; 
import sv.edu.ucad.et1.cineticket.data.entities.Departamentos; 
import sv.edu.ucad.et1.cineticket.data.entities.Usuarios; 
public class UnoaMuchosDemo { 
public static void main(String[] args){ 
    Session sesion = HibernateUtil.getSessionFactory().openSession(); 

    //inicio de la transaccion 
    try{ 
     org.hibernate.Transaction transaccion = sesion.beginTransaction(); 

     Departamentos deptos = createNewDepartamentos(); 
     Usuarios usuarios = createNewUsuarios(deptos); 

     sesion.save(usuarios); 
     transaccion.commit(); 

    }catch(Exception e){ 
     e.printStackTrace(); 
    }finally{ 
     sesion.close(); 
     HibernateUtil.getSessionFactory().close(); 
    } 

} 

//clases empotradas que crean usuarios y deptos 
//crea un nuevo usuario 

private static Usuarios createNewUsuarios(Departamentos deptos) { 
    Usuarios nusu = new Usuarios(); 
    nusu.setApeusu("Messi"); 
    nusu.setNomusu("Lionel"); 
    nusu.setCelusu("7588-8888"); 
    nusu.setDirusu("Camp Nou, Barcelona, Catalunya"); 
    nusu.setFcousu(new Date()); 
    nusu.setCueusu("[email protected]"); 
    nusu.setClausu("12345"); 
    nusu.setDeptos(deptos); 
    nusu.setCodcar((long) 1); 
    nusu.setCodsuc((long) 1);  
    return nusu; 
} 

//crea un nuevo depto 
private static Departamentos createNewDepartamentos() { 
    Departamentos ndepto = new Departamentos(); 
    ndepto.setNomdep("Finanzas"); 
    ndepto.setDesdep("Contabilidad, Tesoreria"); 
    ndepto.setEstdep(true); 
    return ndepto; 
} 
}//fin de la clase Principal 

とエラー: as you can see, the table structure in the query does not correspond to the actual -you may refer to Usuarios.java

すべてのベスト

+0

新しいデータベースを見るように設定ファイルを更新しましたか? – LearningPhase

答えて

0

、 'Usuarios.java' ファイルをチェックしてみてください。それはまだ 'codsal'を持っています:

@Column(name="codsal", nullable=false)  
public Long getCodsal() { 
    return codsuc; 
} 
public void setCodsal(Long codsal) { 
    this.codsuc = codsal; 
} 

これは、hibernateが新しいデータベースでその列を探している理由です。

+0

それは絶対に正しいAdrian、私はそれを100回チェックすることを誓う...とにかく、codsalの代わりにcodsucを更新しました。おかげで – htamayo

+0

あなたはようこそ!私の応答を正解としてマークしてください。他の人がこのスレッドの恩恵を受けるかもしれません。宜しくお願いします。 –

関連する問題