java - Hibernate注解连接问题

标签 java hibernate jakarta-ee spring-mvc hibernate-annotations

我正在尝试使用 hibernate 3 注释和 spring3 mvc 来实现两个表的简单连接操作。

我有两个表:

员工

CREATE TABLE IF NOT EXISTS `employee` (`enter code here`
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(100) NOT NULL,
  `address1` varchar(100) NOT NULL,
  `address2` varchar(100) NOT NULL,
  `created_at` datetime NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB

薪资

CREATE TABLE IF NOT EXISTS `salary` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `employee_id` int(11) NOT NULL,
  `basic_pay` int(5) NOT NULL,
  `take_home` int(5) NOT NULL,
  PRIMARY KEY (`id`),
  KEY `employee_id` (`employee_id`)
) ENGINE=InnoDB

我创建了两个带注释的模态类:

员工.java

@Entity
@Table(name = "employee", catalog = "employee")
public class Employee implements java.io.Serializable {

    private Integer id;
    private String name;
    private String address1;
    private String address2;
    private Date createdAt;
    private Set salaries = new HashSet(0);

    public Employee() {
    }

    public Employee(String name, String address1, String address2,
            Date createdAt) {
        this.name = name;
        this.address1 = address1;
        this.address2 = address2;
        this.createdAt = createdAt;
    }

    public Employee(String name, String address1, String address2,
            Date createdAt, Set salaries) {
        this.name = name;
        this.address1 = address1;
        this.address2 = address2;
        this.createdAt = createdAt;
        this.salaries = salaries;
    }

    @Id
    @GeneratedValue(strategy = IDENTITY)
    @Column(name = "id", unique = true, nullable = false)
    public Integer getId() {
        return this.id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    @Column(name = "name", nullable = false, length = 100)
    public String getName() {
        return this.name;
    }

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

    @Column(name = "address1", nullable = false, length = 100)
    public String getAddress1() {
        return this.address1;
    }

    public void setAddress1(String address1) {
        this.address1 = address1;
    }

    @Column(name = "address2", nullable = false, length = 100)
    public String getAddress2() {
        return this.address2;
    }

    public void setAddress2(String address2) {
        this.address2 = address2;
    }

    @Temporal(TemporalType.TIMESTAMP)
    @Column(name = "created_at", nullable = false, length = 0)
    public Date getCreatedAt() {
        return this.createdAt;
    }

    public void setCreatedAt(Date createdAt) {
        this.createdAt = createdAt;
    }

    @OneToMany(fetch = FetchType.LAZY, mappedBy = "employee")
    public Set getSalaries() {
        return this.salaries;
    }

    public void setSalaries(Set salaries) {
        this.salaries = salaries;
    }

Salary.java

@Entity
@Table(name = "salary", catalog = "employee")
public class Salary implements java.io.Serializable {

    private Integer id;
    private Employee employee;
    private int basicPay;
    private int takeHome;

    public Salary() {
    }

    public Salary(Employee employee, int basicPay, int takeHome) {
        this.employee = employee;
        this.basicPay = basicPay;
        this.takeHome = takeHome;
    }

    @Id
    @GeneratedValue(strategy = IDENTITY)
    @Column(name = "id", unique = true, nullable = false)
    public Integer getId() {
        return this.id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "employee_id", nullable = false)
    public Employee getEmployee() {
        return this.employee;
    }

    public void setEmployee(Employee employee) {
        this.employee = employee;
    }

    @Column(name = "basic_pay", nullable = false)
    public int getBasicPay() {
        return this.basicPay;
    }

    public void setBasicPay(int basicPay) {
        this.basicPay = basicPay;
    }

    @Column(name = "take_home", nullable = false)
    public int getTakeHome() {
        return this.takeHome;
    }

    public void setTakeHome(int takeHome) {
        this.takeHome = takeHome;
    }

当我打开页面时出现以下错误

org.springframework.beans.factory.BeanCreationException: Error creating bean 
with name 'sessionFactory' defined in ServletContext resource [/WEB-INF/spring-servlet.xml]: 
Invocation of init method failed; nested exception is org.hibernate.MappingException: 
Could not determine type for: java.util.Set, at table: EMPLOYEE, for columns: 
[org.hibernate.mapping.Column(salaries)]

我的模态类有什么问题

非常感谢您的帮助, 谢谢, VKS

最佳答案

您的Set工资是一种原始类型,hibernate 不知道如何将其“映射”到一个实体。 尝试添加targetEntity给您@oneToMany或使用Set<Salary>

关于java - Hibernate注解连接问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7871537/

相关文章:

java - 在Spring-WS中如何使用WebServiceMessageDrivenBean?

hibernate - 两个外键作为主键

java - 如何对遗留 J2EE 应用程序进行单元测试

java - 在应用程序服务器初始化期间未调用 @PostConstruct 方法

java - UML 类图关系

java - 在 JavaFX 中检测单键按下

java - 使用 NOLOCK 消除具有悲观锁定的应用程序的死锁

jakarta-ee - native 移动命令 - java 函数

java - 如何创建切入点来支持接口(interface)继承的假客户端?

java - 从不同的jsp调用相同的servlet以达到不同的目的