助けが必要です。
メソッドを使用getAllStreets()
すると、HQL でエラーが発生します。
org.hibernate.exception.SQLGrammarException: Unknown column 'this_1_.houses_id' in 'field list'
私は彼がthis_1_id
代わりに書く必要があると思いますthis_1_.houses_id
私は間違ったエンティティと関係をしたのでしょうか?
2 エンティティ - 家屋と街路
小胞体 - モデル:
テーブルストリート
- ID
- 名前
- Houses_id
テーブルハウス
- ID
- 名前
私のクラス:
街
@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;
}
}
家
@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;
}
}
私の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;
}}
エラー:
log4j:WARN ロガー (org.jboss.logging) のアペンダーが見つかりませんでした。 log4j:WARN log4j システムを適切に初期化してください。 Hibernate: id1_1_ として this_.id、houses2_1_1_ として this_.houses_id、name1_1_ として this_.name、houses3_0_1_ として this_1_.houses_id、id0_0_ として house2_.id、name0_0_ として house2_.name を選択します。 =this_1_.id 左外部ジョインハウス house2_ on this_1_.houses_id=house2_.id org.hibernate.exception.SQLGrammarException: 「フィールド リスト」の列「this_1_.houses_id」が不明です org.hibernate.exception.internal.SQLExceptionTypeDelegate.convert (SQLExceptionTypeDelegate.java:82) で org.hibernate.exception.internal.StandardSQLExceptionConverter.convert (StandardSQLExceptionConverter.java:49) で org.hibernate.engine.jdbc.spi.SqlExceptionHelper.convert (SqlExceptionHelper.java:125) で org.hibernate.engine.jdbc.spi.SqlExceptionHelper.convert (SqlExceptionHelper.java:110) で org.hibernate.engine.jdbc.internal.proxy.AbstractStatementProxyHandler.continueInvocation (AbstractStatementProxyHandler.java:129) で org.hibernate.engine.jdbc.internal.proxy.AbstractProxyHandler.invoke (AbstractProxyHandler.java:81) で $Proxy14.executeQuery (不明なソース) で org.hibernate.loader.Loader.getResultSet(Loader.java:2031) で org.hibernate.loader.Loader.executeQueryStatement (Loader.java:1832) で org.hibernate.loader.Loader.executeQueryStatement (Loader.java:1811) で org.hibernate.loader.Loader.doQuery (Loader.java:899) で org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections (Loader.java:341) で org.hibernate.loader.Loader.doList (Loader.java:2516) で org.hibernate.loader.Loader.doList (Loader.java:2502) で org.hibernate.loader.Loader.listIgnoreQueryCache (Loader.java:2332) で org.hibernate.loader.Loader.list (Loader.java:2327) で org.hibernate.loader.criteria.CriteriaLoader.list (CriteriaLoader.java:124) で org.hibernate.internal.SessionImpl.list (SessionImpl.java:1621) で org.hibernate.internal.CriteriaImpl.list (CriteriaImpl.java:374) で com.ff.DAO.StreetDAOImpl.getAllStreets (StreetDAOImpl.java:48) で FFMain.main(FFMain.java:58) 原因: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: 不明な列 'this_1_.houses_id' in 'field list' sun.reflect.NativeConstructorAccessorImpl.newInstance0(ネイティブメソッド) sun.reflect.NativeConstructorAccessorImpl.newInstance (NativeConstructorAccessorImpl.java:39) で sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27) で java.lang.reflect.Constructor.newInstance (Constructor.java:513) で com.mysql.jdbc.Util.handleNewInstance (Util.java:406) で com.mysql.jdbc.Util.getInstance (Util.java:381) で com.mysql.jdbc.SQLError.createSQLException (SQLError.java:1030) で com.mysql.jdbc.SQLError.createSQLException (SQLError.java:956) で com.mysql.jdbc.MysqlIO.checkErrorPacket (MysqlIO.java:3491) で com.mysql.jdbc.MysqlIO.checkErrorPacket (MysqlIO.java:3423) で com.mysql.jdbc.MysqlIO.sendCommand (MysqlIO.java:1936) で com.mysql.jdbc.MysqlIO.sqlQueryDirect (MysqlIO.java:2060) で com.mysql.jdbc.ConnectionImpl.execSQL (ConnectionImpl.java:2542) で com.mysql.jdbc.PreparedStatement.executeInternal (PreparedStatement.java:1734) で com.mysql.jdbc.PreparedStatement.executeQuery (PreparedStatement.java:1885) で sun.reflect.NativeMethodAccessorImpl.invoke0(ネイティブメソッド) sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) で sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) で java.lang.reflect.Method.invoke(Method.java:597) で org.hibernate.engine.jdbc.internal.proxy.AbstractStatementProxyHandler.continueInvocation (AbstractStatementProxyHandler.java:122) で ... 16以上