我在PostgreSQL数据库中使用hibernate创建两个关联表时遇到问题。我倾向于认为问题在于数据库(配置?),因为我已经尝试了几乎所有在Internet站点中提出的Hibernate方法,并且我仍然收到相同的错误。在使用PostgreSql数据库之前是否需要任何配置?我不能用其他方式解释出现的错误:
“关系部门不存在”
我加入两个实体员工和部门如下:
@Entity
@Table(name="EMPLOYEE")
public class Employee implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name="employee_id")
private Long employeeId;
.
.
.
@ManyToOne
@JoinColumn(name="department_id")
public Department getDepartment() {
return department;
}
public void setDepartment(Department department) {
this.department = department;
}
private Department department;
和
@Entity
@Table(name="DEPARTMENT")
public class Department implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name="DEPARTMENT_ID")
private Long departmentId;
.
.
.
@OneToMany(mappedBy="department")
public Set<Employee> getEmployees() {
return employees;
}
public void setEmployees(Set<Employee> employees) {
this.employees = employees;
}
private Set<Employee> employees;
我正在尝试使用main方法中的几个记录创建表:
SessionFactory sf = new Configuration().configure().buildSessionFactory();
Session session = sf.openSession();
session.beginTransaction();
Department department = new Department();
department.setDepartmentName("Sales");
session.persist(department);
Employee emp1 = new Employee("Nina", "Mayers", "111");
Employee emp2 = new Employee("Tony", "Almeida", "222");
emp1.setDepartment(department);
emp2.setDepartment(department);
session.persist(emp1);
session.persist(emp2);
session.getTransaction().commit();
session.close();
错误出现在行上:session.persist(department);
是否有人在PostgreSql数据库方面有经验,帮助我找到无法识别表/关系的原因,并提出错误:
“关系部门不存在”?
更新:
我查看了日志文件。在从Eclipse发出通常的消息之后,消息的最后一行是:“由于目标机器主动拒绝它,因此无法建立连接”。我推断问题可能出在连接上。是否有任何属性,我应该设置(在pgAdmin中)以实现连接?我已经设置了
行 Eclipse中cfg.xml文件中的 <property name="hibernate.connection.url">jdbc:postgresql://localhost:5432/testDB</property>
。
答案 0 :(得分:1)
启动psql your_database
并发出\d
以查看表格。
我不熟悉Hibernate,但@Table(name="DEPARTMENT")
这样的语句可能正在创建实际上称为"DEPARTMENT"
的表,而您的查询实际上是从DEPARTMENT
查询的(没有双引号),postgresql将其解释为department
。
如果是这样,修复是在创建表名时使用小写,或者在查询表时使Hibernate使用双引号和大写。
答案 1 :(得分:0)
如果您还遇到连接问题,那么解决这些问题的程序就是您所期望的。
令人惊讶的是,#1或#3的时间是原因,并且可能你没有做#4,或者你没有费心去询问另一个错误。