java - hibernate 中的@OneToMany

标签 java mysql sql-server hibernate

我有 2 个具有一对多关系的实体,即一个地址可以有多个员工。

MySQL 数据库:

地址

  • address_id INT PK 自动增量
  • 城市 VARCHAR
  • 国家/地区 VARCHAR

员工

  • id PK 自动增量
  • 名字 VARCHAR
  • 姓氏 VARCHAR
  • 电子邮件 VARCHAR
  • registration_date 日期
  • employee_id INT FK

我在 hibernate 中有以下实体,我想获取具有特定位置的所有员工的列表。

hibernate.cfg.xml

<mapping class="com.example.bean.EmployeeBean"/>
<mapping class="com.example.bean.AddressBean"/>

@Entity
@Table(name="ADDRESS")
public class AddressBean {

    @Id
    @GeneratedValue
    @Column(name="ADDRESS_ID")
    private int addressId;

    @Column(name="CITY")
    private String city;

    @Column(name="COUNTRY")
    private String country;

    @OneToMany(mappedBy="EMPLOYEE")
    private ArrayList<EmployeeBean> employeeList;

    public int getAddressId() {
        return addressId;
    }
    public void setAddressId(int addressId) {
        this.addressId = addressId;
    }
    public String getCity() {
        return city;
    }
    public void setCity(String city) {
        this.city = city;
    }
    public String getCountry() {
        return country;
    }
    public void setCountry(String country) {
        this.country = country;
    }
    public ArrayList<EmployeeBean> getEmployeeList() {
        return employeeList;
    }
    public void setEmployeeList(ArrayList<EmployeeBean> employeeList) {
        this.employeeList = employeeList;
    }
}

@Entity
@Table(name="EMPLOYEE")
public class EmployeeBean {
    @GeneratedValue
    @Id
    @Column(name="ID")
    private int id;
    @Column(name="FIRST_NAME")
    private String firstName;
    @Column(name="LAST_NAME")
    private String lastName;
    @Column(name="EMAIL")
    private String email;
    @Column(name="REGISTRATION_DATE")
    private String registrationDate;

    public int getId() {
        return id;
    }
    public void setId(int id) {
        this.id = id;
    }
    public String getFirstName() {
        return firstName;
    }
    public void setFirstName(String firstName) {
        this.firstName = firstName;
    }
    public String getLastName() {
        return lastName;
    }
    public void setLastName(String lastName) {
        this.lastName = lastName;
    }
    public String getEmail() {
        return email;
    }
    public void setEmail(String email) {
        this.email = email;
    }
    public String getRegistrationDate() {
        return registrationDate;
    }
    public void setRegistrationDate(String registrationDate) {
        this.registrationDate = registrationDate;
    }
}

编译时出现以下错误..我哪里做错了?

Initial SessionFactory creation failed.org.hibernate.AnnotationException: Illegal attempt to map a non collection as a @OneToMany, @ManyToMany or @CollectionOfElements: com.example.bean.AddressBean.employeeList

最佳答案

您不能在 @OneToMany 关系中使用 Collection 的特定实现。

你有问题的部分是

private ArrayList<EmployeeBean> employeeList;

你必须使用

private List<EmployeeBean> employeeList;

另请注意,List 还需要某种排序标准,因此最好使用 Set:

private Set<EmployeeBean> employeeList;

关于java - hibernate 中的@OneToMany,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29915394/

相关文章:

java - JPanel 问题

mysql - Doctrine LIMIT 语法错误?

sql-server - SQL Server触发器-使用deletetime将删除的记录插入到另一个表中

java - android 当回车时清除RecyclerView

java - 如何将给定的数据解析为java对象

java - Oracle NoSQL 数据库 — 使用它进行开发

jquery - 如何在不刷新页面的情况下自动将新插入的mysql数据显示到laravel View 中?

mysql - 无法从mysql中的记录中打印出最大值

c# - ASP.NET 中的 SqlDependency

sql-server - TSQL 更改游标定义