代码之家  ›  专栏  ›  技术社区  ›  DaJackal

为什么我有一个映射异常?

  •  1
  • DaJackal  · 技术社区  · 14 年前

    现在我想制作一个小型的Java应用程序,以便学习Hibernate框架。但它给了我 org.hibernate.MappingException: Repeated column in mapping for entity: model.Book column: author (should be mapped with insert="false" update="false") . 如果我从entities.hbm.xml中删除author列映射,那么它会向我显示SQL消息“selec-from…”,但在这之后,它会给我两个例外:

    • org.hibernate.exception.GenericJDBCException: could not execute query
    • java.sql.SQLException: No database selected.

    有人能帮我吗?

    hibernate.cfg.xml文件:

    <?xml version='1.0' encoding='utf-8'?>
    <!DOCTYPE hibernate-configuration PUBLIC
    "-//Hibernate/Hibernate Configuration DTD//EN"
    "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
    
    <hibernate-configuration>
    <session-factory>
    
        <property name = "hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
        <property name = "hibernate.connection.url">jdbc:mysql://127.0.0.1:3306</property>
        <property name = "hibernate.connection.username">root</property>
        <property name = "hibernate.connection.password"></property>
        <property name = "hibernate.connection.pool_size">10</property>
        <property name = "dialect">org.hibernate.dialect.MySQLDialect</property>
        <property name = "hibernate.hbm2ddl.auto">update</property>
        <property name = "show_sql">true</property>
    
        <mapping resource = "entities.hbm.xml"/>
    
    </session-factory>
    </hibernate-configuration>
    

    entities.hbm.xml文件:

    <?xml version="1.0"?>
    <!DOCTYPE hibernate-mapping PUBLIC 
    "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
    "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
    
    <hibernate-mapping package = "model">
    
       <class name = "Genre" table = "virtual bookcase.genres">
          <id name = "id" column = "idGenres" type = "long">
            <generator class = "increment"/>
          </id>   
          <property name = "name" column = "name" type = "string"/>
          <set name = "books" table = "books" cascade = "all-delete-orphan">
            <key column = "idGenres" not-null = "true" />
            <one-to-many class = "Book"/>
          </set>
       </class>
    
       <class name = "Book" table = "virtual bookcase.books">
            <id name = "id" column = "idBooks" type = "long">
             <generator class = "increment"/>
            </id>
            <property name = "title" column = "title" type = "string"/>
            <property name = "author" column = "author" type = "string"/>
            <property name = "publisher" column = "author" type = "string"/>
            <property name = "pages" column = "pages" type = "short"/>
            <property name = "borrowed" column = "borrowed" type = "byte"/>
            <property name = "borrowedTo" column = "borrowedTo" type = "string"/>
       </class>
    
    </hibernate-mapping>
    

    Java实体:

    public class Genre
    {
        private long id;
        private String name;
        private Set<Book> books;
    
        public long getId()
        {
            return id;
        }
    
        public String getName()
        {
            return name;
        }
    
        public void setId(long id)
        {
            this.id = id;
        }
    
        public void setName(String name)
        {
            this.name = name;
        }
    
        public Set<Book> getBooks()
        {
            return books;
        }
    
        public void setBooks(Set<Book> books)
        {
            this.books = books;
        }
    
        @Override
        public String toString()
        {
            return name;
        }
    }
    

    getbooks()方法:

    public Set<Book> getBooks()
        {
            Set<Book> books = null;
    
            connect();
    
            SessionFactory sf = new Configuration().configure().buildSessionFactory();
            Session s = sf.openSession();
    
            Query q = s.createQuery("FROM Book");
            books = new TreeSet<Book>(q.list());
    
            for (Book b : books)
                System.out.println(b);
    
            s.close();
            sf.close();
    
            disconnect();
    
            return books;
        }
    
    2 回复  |  直到 14 年前
        1
  •  3
  •   stefanglase    14 年前

    <property name="author" column="author" type="string"/>
    <property name="publisher" column="author" type="string"/>
    

    <property name="hibernate.connection.url">
        jdbc:mysql://127.0.0.1:3306/dbname
    </property>
    

    public class SessionFactoryUtil {
    
        private static SessionFactory sessionFactory;
    
        private SessionFactoryUtil() {}
    
        static {
           sessionFactory = new Configuration().configure().buildSessionFactory();
        }
    
        public static SessionFactory getInstance() { return sessionFactory; }
    
    }
    
        2
  •  0
  •   Juha Syrjälä    14 年前

    <property name = "hibernate.connection.url">jdbc:mysql://127.0.0.1:3306/DATABASENAME</property>