java hibernate Colonne inconnue '' dans 'liste de champs'
J'ai besoin d'une aide.
Lorsque j'utilise getAllStreets()
méthode que j'ai erreur dans les requêtes HQL:
org.hibernate.exception.SQLGrammarException: Unknown column 'this_1_.houses_id' in 'field list'
Je suppose qu'il doit écrire this_1_id
au lieu this_1_.houses_id
Peut être que je fait de mal Entité et de relation ?
2 de l'entité - les Maisons et les Rues
ER - modèle:
Table Rues
- Id
- Nom
- Houses_id
Table De Maisons
- id
- nom
Mes Classes:
Rue
@Entity
@Table(name="Streets")
public class Street {
private Long id;
private String name;
private Long houses_id;
private House house;
public Street(){}
@Id
@GeneratedValue(generator="increment")
@GenericGenerator(name="increment", strategy="increment")
@Column(name="id")
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
@Column(name="name")
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@ManyToOne
@JoinTable(name="Houses", joinColumns = @JoinColumn(name="id"), inverseJoinColumns=@JoinColumn(name="houses_id"))
public House getHouse() {
return house;
}
public void setHouse(House house) {
this.house = house;
}
@Column(name="houses_id")
public Long getHouses_id() {
return houses_id;
}
public void setHouses_id(Long houses_id) {
this.houses_id = houses_id;
}
}
Maison
@Entity
@Table(name="Houses")
public class House {
private Long id;
private String name;
public House(){}
@Id
@GeneratedValue(generator = "increment")
@GenericGenerator(name="increment", strategy="increment")
@Column(name="id")
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
@Column(name="name")
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
Mon DAOIMP:
StreetDAOImp:
public class StreetDAOImpl implements StreetDAO {
@Override
public void addStreet(Street street) throws SQLException {
//TODO Auto-generated method stub
Session session = null;
try {
session = HibernateUtil.getSessionFactory().openSession();
session.beginTransaction();
session.save(street);
session.getTransaction().commit();
} catch (Exception e) {
//TODO: handle exception
e.printStackTrace();
}
finally{
if(session != null && session.isOpen()){
session.close();
}
}
}
@Override
public Collection getAllStreets() throws SQLException {
//TODO Auto-generated method stub
Session session = null;
List<Street> streets = new ArrayList<Street>();
try {
session = HibernateUtil.getSessionFactory().openSession();
streets = session.createCriteria(Street.class).list();
//Query q = session.createQuery("select str from com.ff.model.Street str join str.houses h where h.id = str.houses_id");
} catch (Exception e) {
//TODO: handle exception
e.printStackTrace();
}
return streets;
}
}
HouseDAOImpl:
public class HouseDAOImpl implements HouseDAO {
@Override
public void addHouse(House house)throws SQLException {
//TODO Auto-generated method stub
Session session = null;
try {
session = HibernateUtil.getSessionFactory().openSession();
session.beginTransaction();
session.save(house);
session.getTransaction().commit();
} catch (Exception e) {
//TODO: handle exception
e.printStackTrace();
}
finally{
if(session != null && session.isOpen()){
session.close();
}
}
}
@Override
public Collection getAllHouses() throws SQLException {
//TODO Auto-generated method stub
Session session = null;
List<House> houses = new ArrayList<House>();
try {
session = HibernateUtil.getSessionFactory().openSession();
houses = session.createCriteria(House.class).list();
} catch (Exception e) {
//TODO: handle exception
e.printStackTrace();
}
finally {
if (session != null && session.isOpen()) {
session.close();
}
}
return houses;
}}
Erreur:
log4j:AVERTIR Aucune appenders pourrait être trouvé pour enregistreur (org.jboss.l'exploitation forestière). log4j:AVERTIR Veuillez initialiser le log4j système correctement. Hibernate: sélectionnez this_.id id1_1_, this_.houses_id comme houses2_1_1_, this_.nom de name1_1_, this_1_.houses_id comme houses3_0_1_, house2_.id id0_0_, house2_.nom de name0_0_ de Rues this_ jointure externe gauche Maisons this_1_ sur this_.id=this_1_.id jointure externe gauche Maisons house2_ sur this_1_.houses_id=house2_.id org.mise en veille prolongée.exception à la règle.SQLGrammarException: Unknown column 'this_1_.houses_id' in 'field list' au org.mise en veille prolongée.exception à la règle.interne.SQLExceptionTypeDelegate.convertir(SQLExceptionTypeDelegate.java:82) au org.hibernate.exception.internal.StandardSQLExceptionConverter.convert(StandardSQLExceptionConverter.java:49) au org.mise en veille prolongée.moteur.jdbc.le spi.SqlExceptionHelper.convertir(SqlExceptionHelper.java:125) au org.mise en veille prolongée.moteur.jdbc.le spi.SqlExceptionHelper.convertir(SqlExceptionHelper.java:110) au org.hibernate.engine.jdbc.internal.proxy.AbstractStatementProxyHandler.continueInvocation(AbstractStatementProxyHandler.java:129) au org.mise en veille prolongée.moteur.jdbc.interne.proxy.AbstractProxyHandler.invoke(AbstractProxyHandler.java:81) à $Proxy14.executeQuery(Source Inconnue) au org.mise en veille prolongée.loader.Loader.getResultSet(Loader.java:2031) au org.mise en veille prolongée.loader.Loader.executeQueryStatement(Loader.java:1832) au org.mise en veille prolongée.loader.Loader.executeQueryStatement(Loader.java:1811) au org.mise en veille prolongée.loader.Loader.doQuery(Loader.java:899) au org.mise en veille prolongée.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:341) au org.mise en veille prolongée.loader.Loader.doList(Loader.java:2516) au org.mise en veille prolongée.loader.Loader.doList(Loader.java:2502) au org.mise en veille prolongée.loader.Loader.listIgnoreQueryCache(Loader.java:2332) au org.mise en veille prolongée.loader.Loader.liste(Loader.java:2327) au org.mise en veille prolongée.loader.les critères.CriteriaLoader.liste(CriteriaLoader.java:124) au org.mise en veille prolongée.interne.SessionImpl.liste(SessionImpl.java:1621) au org.mise en veille prolongée.interne.CriteriaImpl.liste(CriteriaImpl.java:374) au com.ff.DAO.StreetDAOImpl.getAllStreets(StreetDAOImpl.java:48) au FFMain.principale(FFMain.java:58) Causés par: com.mysql.jdbc.des exceptions.jdbc4.MySQLSyntaxErrorException: Unknown column 'this_1_.houses_id' in 'field list' au coucher du soleil.de réfléchir.NativeConstructorAccessorImpl.newInstance0(Native method) au coucher du soleil.de réfléchir.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39) au coucher du soleil.de réfléchir.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27) à java.lang.de réfléchir.Constructeur.newInstance(Constructeur.java:513) au com.mysql.jdbc.Util.handleNewInstance(Util.java:406) au com.mysql.jdbc.Util.getInstance(Util.java:381) au com.mysql.jdbc.La fonction SQLError.createSQLException(SQLError.java:1030) au com.mysql.jdbc.La fonction SQLError.createSQLException(SQLError.java:956) au com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3491) au com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3423) au com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1936) au com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2060) au com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2542) au com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:1734) au com.mysql.jdbc.PreparedStatement.executeQuery(PreparedStatement.java:1885) au coucher du soleil.de réfléchir.NativeMethodAccessorImpl.invoke0(Native method) au coucher du soleil.de réfléchir.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) au coucher du soleil.de réfléchir.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) à java.lang.de réfléchir.La méthode.invoke(la Méthode.java:597) au org.hibernate.engine.jdbc.internal.proxy.AbstractStatementProxyHandler.continueInvocation(AbstractStatementProxyHandler.java:122) 16 de plus ...
source d'informationauteur
Vous devez vous connecter pour publier un commentaire.
Découvrez ce code:
Je ne suis pas sûr de ce que vous essayez d'atteindre ici, mais JoinTable est généralement utilisé pour résoudre les relations ManyToMany avec table intermédiaire. Donc ce code implique que vous avez de la table
Houses
avecid
ethouses_id
colonnes. Message d'erreur dit qu'il n'y a pas dehouses_id
dansHouses
table (ce qui semble logique pour moi)Peut-être que vous devriez essayer ManyToOne et JoinColumn à la place? Par exemple:
ou
houses_id
si c'est votre clé étrangère dans les rues de la table. Le pluriel semble étrange, si ce est vraiment beaucoup de relation.Assurez-vous que la table que vous appelez le droit de colonnes. J'ai eu le problème et j'ai trouvé que le mappé domaine colonnes n'ont pas de correspondance dans la base de données.
Il suffit de cocher vos noms de variables dans votre POJO et les noms fournis dans la base de données. Quand ils ne sont pas la même chose cette erreur est renvoyée.
Veuillez vérifier si votre base de données comprend tous les tableaux. Si il y a des tables ou des attributs dans la table de manquant, de les ajouter à votre base de données et re-ajouter vos fichiers de mapping hibernate. J'ai fixé cette erreur. J'ai eu 2 attributs manquants dans deux tables de ma base de données et une fois que j'ai ajouté et ajouter de nouveau mise en veille prolongée, l'erreur a été corrigée.