2013-02-25 15 views
12

Yardımıma ihtiyacım var.java hibernate Bilinmeyen sütun '' in 'alan listesindeki'

i HQL i hata var getAllStreets() yöntemi kullanın: ben yanlış Varlık ve ilişkiyi yaptılar o this_1_id yazmalısınız tahmin

org.hibernate.exception.SQLGrammarException: Unknown column 'this_1_.houses_id' in 'field list' 

yerine this_1_.houses_id

olabilir?

2 varlık - Evler ve Sokaklar

ER - modeli:

Tablo Sokaklar

  • Kimliği
  • Adı
  • Houses_id

Tablo Evler

  • id
  • adı

Benim Sınıflar:

Sokak

@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"), [email protected](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; 
    } 
} 

Ev

@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; 
    } 
} 

Benim 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; 
}} 

Hata:

 
log4j:WARN No appenders could be found for logger (org.jboss.logging). 
log4j:WARN Please initialize the log4j system properly. 
Hibernate: select this_.id as id1_1_, this_.houses_id as houses2_1_1_, this_.name as name1_1_, this_1_.houses_id as houses3_0_1_, house2_.id as id0_0_, house2_.name as name0_0_ from Streets this_ left outer join Houses this_1_ on this_.id=this_1_.id left outer join Houses house2_ on this_1_.houses_id=house2_.id 
org.hibernate.exception.SQLGrammarException: Unknown column 'this_1_.houses_id' in 'field list' 
    at org.hibernate.exception.internal.SQLExceptionTypeDelegate.convert(SQLExceptionTypeDelegate.java:82) 
    at org.hibernate.exception.internal.StandardSQLExceptionConverter.convert(StandardSQLExceptionConverter.java:49) 
    at org.hibernate.engine.jdbc.spi.SqlExceptionHelper.convert(SqlExceptionHelper.java:125) 
    at org.hibernate.engine.jdbc.spi.SqlExceptionHelper.convert(SqlExceptionHelper.java:110) 
    at org.hibernate.engine.jdbc.internal.proxy.AbstractStatementProxyHandler.continueInvocation(AbstractStatementProxyHandler.java:129) 
    at org.hibernate.engine.jdbc.internal.proxy.AbstractProxyHandler.invoke(AbstractProxyHandler.java:81) 
    at $Proxy14.executeQuery(Unknown Source) 
    at org.hibernate.loader.Loader.getResultSet(Loader.java:2031) 
    at org.hibernate.loader.Loader.executeQueryStatement(Loader.java:1832) 
    at org.hibernate.loader.Loader.executeQueryStatement(Loader.java:1811) 
    at org.hibernate.loader.Loader.doQuery(Loader.java:899) 
    at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:341) 
    at org.hibernate.loader.Loader.doList(Loader.java:2516) 
    at org.hibernate.loader.Loader.doList(Loader.java:2502) 
    at org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2332) 
    at org.hibernate.loader.Loader.list(Loader.java:2327) 
    at org.hibernate.loader.criteria.CriteriaLoader.list(CriteriaLoader.java:124) 
    at org.hibernate.internal.SessionImpl.list(SessionImpl.java:1621) 
    at org.hibernate.internal.CriteriaImpl.list(CriteriaImpl.java:374) 
    at com.ff.DAO.StreetDAOImpl.getAllStreets(StreetDAOImpl.java:48) 
    at FFMain.main(FFMain.java:58) 
Caused by: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Unknown column 'this_1_.houses_id' in 'field list' 
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) 
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39) 
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27) 
    at java.lang.reflect.Constructor.newInstance(Constructor.java:513) 
    at com.mysql.jdbc.Util.handleNewInstance(Util.java:406) 
    at com.mysql.jdbc.Util.getInstance(Util.java:381) 
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1030) 
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:956) 
    at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3491) 
    at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3423) 
    at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1936) 
    at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2060) 
    at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2542) 
    at com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:1734) 
    at com.mysql.jdbc.PreparedStatement.executeQuery(PreparedStatement.java:1885) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 
    at java.lang.reflect.Method.invoke(Method.java:597) 
    at org.hibernate.engine.jdbc.internal.proxy.AbstractStatementProxyHandler.continueInvocation(AbstractStatementProxyHandler.java:122) 
    ... 16 more 
+10

Aaaa! Çok fazla kod! – Andremoniy

+0

Sokak nesnesinde neden ev kimliğiniz ve eviniz var? – BobTheBuilder

+0

Bu sorguyu doğrudan çalıştırmayı denediniz mi? Streets' tablonun 'houses_id' sütunu var mı? –

cevap

3

Kontrol dışarı bu kodu:

@JoinTable(name="Houses", joinColumns = @JoinColumn(name="id"), [email protected](name="houses_id")) 

Burada neyi başarmaya çalıştığınızdan emin değilim, ancak JoinTable genellikle ManyToMany ilişkilerini ara tabloyla çözmek için kullanılır. Bu kod, numaralı id ve houses_id sütunlarına sahip olduğunuz anlamına gelir. Hata iletisi, Houses (Houses) tablosundaki houses_id tablonun olmadığını gösterir.
Belki bunun yerine ManyToOne ve JoinColumn'u denemelisiniz? Örneğin:

@JoinColumn(name="house_id") 

veya houses_id o sokaklar tabloda yabancı anahtar buysa. Çoğul, bu gerçekten çoktan bir ilişki ise garip geliyor.

+1

evet, evet haklısınız! ! i ne kadar üzücü birisi ve yazma silin: @ManyToOne \t @JoinColumn (isim = "houses_id") \t kamu Ev getHouse() { \t \t dönüş ev; \t} \t public void setHouse (Ev ev) {this.house = ev \t \t; \t} ve işe yarıyor. Evdeki test gerçekliğine ihtiyacım var. –

+0

tüm çalışmalar, teşekkürler ..) –

5

Lütfen aradığınız tablonun doğru sütunlara sahip olduğundan emin olun.Sorunu aldım ve eşlenen alan sütunlarının veritabanında eşleşmediğini buldum.

-1

Değişken adlarınızı POJO'nuzda ve veritabanında sağlanan adlarda kontrol edin. Aynı olmadıklarında bu hata atılır.

+2

Bu bir yorum olmalı. Sorunun cevabı değil. Biraz açıklama ekleyin ve daha fazla ayrıntı ile açıklayın. – Raju

-1

Lütfen veritabanınızın tüm tabloları olup olmadığını kontrol edin. Tabloda herhangi bir tablo veya öznitelik yoksa, bunları veritabanınıza ekleyin ve hazırda bulunan eşleme dosyalarınızı yeniden ekleyin. Bu hatayı bu şekilde düzelttim. Veritabanımın iki tablosunda eksik olan 2 özniteliğim var ve bunları bir kez ekledim ve hazırda bekletme ekledim, hata giderildi.

İlgili konular