2016-04-13 4 views
0

Ich verwende Hibernate, um Daten zu zwei Tabellen in Postgres persistent zu machen, vor kurzem habe ich einige Änderungen in der Tabellenstruktur und ich entschied, eine andere Datenbank zu erstellen, immer mit Postgres natürlich wann Ich versuche, den Java-Code auszuführen Ich habe herausgefunden, dass Hibernate immer nach der alten Tabellenstruktur sucht; um sicher zu sein, habe ich mich entschieden, die alte Tabelle im DBMS zu löschen, aber Hibernate sucht nach der alten Tabellenstruktur, tatsächlich habe ich das bemerkt, weil ein Feld im neuesten Design nicht mehr existiert. Meine Frage ist: Gibt es eine Möglichkeit, dies in Hibernate zu aktualisieren? Wo soll ich suchen? Ich benutze Eclipse Mars, räume mein Projekt auf und starte es neu, aber immer noch dasselbe.Änderungen an Tabellenstruktur, aber Hibernate aktualisiert es nicht

Hier ist es meine hibernate.cfg.xml

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> 

mein HibernateUtil.java ist:

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 

Hier ist meine 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; 
} 
} 

Das ist mein 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 

dies ist die Hauptklasse:

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 

und der Fehler: as you can see, the table structure in the query does not correspond to the actual -you may refer to Usuarios.java

Alles Gute

+0

Haben Sie Ihre Konfigurationsdatei aktualisiert, um sich die neue Datenbank anzusehen? – LearningPhase

Antwort

0

Bitte, Datei 'Usuarios.java' überprüfen. Es hat immer noch ‚codsal‘:

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

Das immer noch, warum Hibernate sieht für diese Spalte auf neue Datenbank.

+0

Das ist absolut richtig Adrian, ich schwöre, ich überprüfe es einhundert Mal ... Wie auch immer, ich habe codsuc anstelle von codsal aktualisiert, wie du vorgeschlagen und das Problem gelöst hast. Danke – htamayo

+0

Sie sind herzlich willkommen! Fühlen Sie sich frei, meine Antwort als die richtige Antwort zu markieren, damit andere von diesem Thread profitieren können. Freundliche Grüße. –

Verwandte Themen