Intellij Idea中的Hibernate XML映射具有多对多关系

时间:2016-12-03 05:04:31

标签: java xml hibernate many-to-many

我在IntelliJ IdeaPostgreSQL数据库中运行了多个到多个hibernate项目。我的程序有这个项目树:

this project tree

PostgreSQL中项目的表格是

{
  CREATE TABLE many2many.category
  (
    category_id integer NOT NULL,
    "name" character varying(255) NOT NULL,
    "desc" character varying(255) NOT NULL,
    CONSTRAINT category_id PRIMARY KEY (category_id)
  )
WITH (
  OIDS=FALSE
);
ALTER TABLE many2many.category OWNER TO ca;

CREATE TABLE many2many.stock
(
  stock_id integer NOT NULL,
  stock_code character varying(255),
  stock_name character varying(255),
  CONSTRAINT stock_id PRIMARY KEY (stock_id),
  CONSTRAINT uni_stock_id UNIQUE (stock_code),
  CONSTRAINT uni_stock_name UNIQUE (stock_name)
)
WITH (
  OIDS=FALSE
);
ALTER TABLE many2many.stock OWNER TO ca;


CREATE TABLE many2many.stock_category
(
  stock_id integer NOT NULL,
  category_id integer NOT NULL,
  CONSTRAINT pk_ PRIMARY KEY (stock_id, category_id),
  CONSTRAINT fk_category_id FOREIGN KEY (category_id)
      REFERENCES many2many.category (category_id) MATCH SIMPLE
      ON UPDATE NO ACTION ON DELETE NO ACTION,
  CONSTRAINT fk_stock_id FOREIGN KEY (stock_id)
      REFERENCES many2many.stock (stock_id) MATCH SIMPLE
      ON UPDATE NO ACTION ON DELETE NO ACTION
)
WITH (
  OIDS=FALSE
);
ALTER TABLE many2many.stock_category OWNER TO ca;
}

以及表格的关系:

table relationship

和类别类和股票的代码类似

import java.util.HashSet;
import java.util.Set;

public class Category {
    private Integer categoryId;
    private String name;
    private String desc;
    private Set<Stock> stocks = new HashSet<Stock>(0);

    public Set<Stock> getStocks() {
        return stocks;
    }

    public void setStocks(Set<Stock> stocks) {
        this.stocks = stocks;
    }

    public String getDesc() {
        return desc;
    }

    public void setDesc(String desc) {
        this.desc = desc;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Integer getCategoryId() {
        return categoryId;
    }

    public void setCategoryId(Integer categoryId) {
        this.categoryId = categoryId;
    }

    //getter, setter and constructor
    }

hibernate.entity

import java.util.HashSet;
import java.util.Set;

public class Stock {    
    private Integer stockId;
    private String stockCode;
    private String stockName;
    private Set<Category> categories = new HashSet<Category>(0);

    public Integer getStockId() {
        return stockId;
    }

    public void setStockId(Integer stockId) {
        this.stockId = stockId;
    }

    public String getStockCode() {
        return stockCode;
    }

    public void setStockCode(String stockCode) {
        this.stockCode = stockCode;
    }

    public String getStockName() {
        return stockName;
    }

    public void setStockName(String stockName) {
        this.stockName = stockName;
    }

    public Set<Category> getCategories() {
        return categories;
    }

    public void setCategories(Set<Category> categories) {
        this.categories = categories;
    }
}

App类:

package hibernate;

import hibernate.entity.Category;
import hibernate.entity.Stock;
import org.hibernate.Session;

import java.util.HashSet;
import java.util.Set;

public class App {


    public static void main(String[] args) {

        System.out.println("Hibernate many to many (XML Mapping)");
        Session session = HibernateUtil.getSessionFactory().openSession();

        session.beginTransaction();

        Stock stock = new Stock();
        stock.setStockCode("7052");
        stock.setStockName("PADINI");

        Category category1 = new Category();
        category1.setName("CONSUMER");

        Category category2 = new Category();
        category2.setName("INVESTMENT COMPANY");

        Set<Category> categories = new HashSet<Category>();
        categories.add(category1);
        categories.add(category2);

        stock.setCategories(categories);

        session.save(stock);

        session.getTransaction().commit();
        System.out.println("Done");
    }
}

Hibernateutil

package hibernate;

import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;

/**
 * Created by hedayat on 11/27/2016.
 */
public class HibernateUtil {

        private static final SessionFactory sessionFactory = buildSessionFactory();

        private static SessionFactory buildSessionFactory() {
            try {
                // Create the SessionFactory from hibernate.cfg.xml
                return new Configuration().configure().buildSessionFactory();

            }
            catch (Throwable ex) {
                // Make sure you log the exception, as it might be swallowed
                System.err.println("Initial SessionFactory creation failed." + ex);
                throw new ExceptionInInitializerError(ex);
            }
        }

        public static SessionFactory getSessionFactory() {
            return sessionFactory;
        }

        public static void shutdown() {
            // Close caches and connection pools
            getSessionFactory().close();
        }

    }

and file Stock.hbm.xml`有以下代码:

Stock.hbm.xml

和类别的文件hibernate.xml具有以下代码:

Category.hbm.xml

和Hibernate config的文件hibernate.xml有以下代码:

Hibernate.cfg.xml

.pom提交此文件:

pom.xml

当我尝试运行此项目时,我会收到很多错误,如下图所示:

error in run

我该怎么办?
我在谷歌搜索了这个错误,我知道我将在pom.xml中改变依赖关系。我这样做,但我的项目仍然是错误的 我的项目使用Postgres 8.4hibernate 3.6.3

0 个答案:

没有答案