0

JPA のフィルター条件について質問があります。フィルター条件のみ別の Entity クラスを呼び出すことは可能ですか?

JSF ページが読み込まれると、ManagedBeans で呼び出されるメソッドがEmployeeDAOImp呼び出されます。findEmployeeユーザーがフィルター条件を JSF のデータテーブルに入れると、対応する Entity クラスEmployee(Employee_メタモデル)が検索されます。

EmployeeAll_ユーザーがクラスの代わりにフィルターを適用する場合など、フィルターのみの名前の別のエンティティークラスをクラス化できるかどうかを知りたいEmployee_ですか?

Employee_とクラスの違いは、EmployeeAll_最初のクラスにはすべての従業員レコードが含まれていないことです (彼の部門にのみ限定され、後者にはすべての従業員 (すべての部門) が含まれています)。どちらもデータベースから同じ列のセットを返します。

どんな助けも非常に高く評価されます。

EmployeeDAOImpl クラス

public void findEmployee(Employee employee) {
        try {
        CriteriaBuilder cb = entityManager.getCriteriaBuilder();
        CriteriaQuery<Employee> e = cb.createQuery(Employee.class);
        Root<Employee> emp = c.from(Employee.class);
        e.orderBy(cb.desc(emp.get("employeeNo")));
        c.select(emp);  

            CriteriaQuery<Long> countQ = cb.createQuery(Long.class);
        Root<Employee> empCount = countQ.from(Employee.class);
        countQ.select(cb.count(empCount));

           String employeeNo = employee.getEmployeeNo("");
           List<Predicate> criteria = new ArrayList<Predicate>();
              if (employeeNo != null) {
                ParameterExpression<String> pexp =
                cb.parameter(String.class,"employeeNo");
                Predicate predicate = 
                cb.like(emp.get(Employee_.employeeNo),pexp);
                criteria.add(predicate);
            } 
                TypedQuery<Employee> q = entityManager.createQuery(c); 
                if (employeeNo != null) {
         q.setParameter("employeeNo", employeeNo+"%");      
                } 
4

1 に答える 1

1

all_employees_view基本的に従業員と同じオブジェクト タイプを示すため、エンティティとしてマッピングすることは避けてください。

ログインした従業員の情報をセッション スコープの Bean に格納し、ManagedProperty アノテーションを使用して Bean を注入し、クエリの作成を担当する dao サービスに渡し、最後にクエリ条件で使用します。

デパートメント

@Entity
public class Department {
    @Id
    private Integer id;
    @OneToMany(mappedBy="department")
    private Collection<Employee> employees;
}

従業員

@Entity
public class Employee {
    @Id
    private Integer id;
    @ManyToOne
    @JoinColumn(name="department_id")
    private Department department;
}

UserBean

@ManagedBean
@SessionScoped
public class UserBean {
    private Employee user;  // + getter, setter. The property is set during login
}

EmployeeBean

@ManagedBean
@ViewScoped
public class EmployeeBean {
    @ManagedProperty(value="#{userBean}")
    private UserBean userBean;  // + setter
    // this bean retrieves the records pertaining the logged-in user's department:
    Department userDepartment;
    @PostConstruct
    private void init() {
        userDepartment = userBean.getUser().getDepartment();
    }
}

userDepartment最後に、DAO サービスに、入力引数として取る find メソッドを実装させます。

于 2013-06-26T08:28:04.087 に答える