微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

java hibernate’字段列表’中的未知列”

我需要一个帮助.

当我使用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
>名称
> 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 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,如果这是你的外键在街道表.如果这真的是一对一的关系,多个声音很奇怪.

原文地址:https://www.jb51.cc/java/123903.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐