java hibernate’字段列表’中的未知列”
发布时间:2020-12-14 17:47:08 所属栏目:Java 来源:网络整理
导读:我需要一个帮助. 当我使用getAllStreets()方法我有HQL错误: org.hibernate.exception.SQLGrammarException: Unknown column 'this_1_.houses_id' in 'field list' 我想他必须写this_1_id而不是this_1_.houses_id 可能我做错了实体和关系? 2实体 – 房屋和
我需要一个帮助.
当我使用getAllStreets()方法我有HQL错误: org.hibernate.exception.SQLGrammarException: Unknown column 'this_1_.houses_id' in 'field list' 我想他必须写this_1_id而不是this_1_.houses_id 可能我做错了实体和关系? 2实体 – 房屋和街道 ER型号: 表街 > 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 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 解决方法
看看这段代码:
@JoinTable(name="Houses",inverseJoinColumns=@JoinColumn(name="houses_id")) 我不知道你在这里想要实现什么,但是JoinTable通常用于解决与中介表的ManyToMany关系.所以这个代码意味着你有一个具有id和homes_id列的房屋.错误消息说在Houses表中没有house_id(这对我来说听起来是合乎逻辑的)也许你应该尝试ManyToOne和JoinColumn?例如: @JoinColumn(name="house_id") 或houses_id,如果这是你的外键在街道表.如果这真的是一对一的关系,多个声音很奇怪. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |