Hibernate Extra Lazy oneToMany关联,使用contains()方法比其他字段比id更?

时间:2016-03-31 03:12:59

标签: java hibernate

如您所知,您可以在Hibernate中声明与ExtraLazy语义的OneToMany关联,这意味着size(),contains()和其他可能变得更聪明。它将运行特定的SQL语句,不会初始化整个集合。大型收藏的绝佳功能。

看起来像contains()方法,只比较Id(主键)。假设这个例子:

    class Department {
        ........
        @OneToMany(mappedBy = "department", cascade = CascadeType.ALL, fetch= FetchType.LAZY)
        @LazyCollection(LazyCollectionOption.EXTRA)
        private Collection<Employee> employees = new ArrayList<Employee>();
        .........
        public void addEmployee(Employee e) {
           if (!this.employees.contains(e)) {
              employees.add(e);
              e.setDepartment(this);
           }
        }
    }

上面的代码是一个Department类,它使用ExtraLazy与Employee(另一个实体)建立OneToMany关联。在addEmployee()方法中,我使用了PersistentBag的方法contains()。

当我看到Hibernate生成的SQL语句时,我看到它通过Employee的ID发出了一个SQL比较。 如果我想通过名称检查Employee是否存在怎么办?由于我不想在Deparment中使用同名的Employee?还是员工的其他领域?有没有办法做到这一点?

0 个答案:

没有答案