我在IntelliJ Idea
和PostgreSQL
数据库中运行了多个到多个hibernate项目。我的程序有这个项目树:
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;
}
以及表格的关系:
和类别类和股票的代码类似
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`有以下代码:
和类别的文件hibernate.xml
具有以下代码:
和Hibernate config的文件hibernate.xml
有以下代码:
和.pom
提交此文件:
当我尝试运行此项目时,我会收到很多错误,如下图所示:
我该怎么办?
我在谷歌搜索了这个错误,我知道我将在pom.xml
中改变依赖关系。我这样做,但我的项目仍然是错误的
我的项目使用Postgres 8.4
和hibernate 3.6.3
。