Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jpa 使用表单参数实现EJB搜索的正确方法是什么?_Jpa_Ejb - Fatal编程技术网

Jpa 使用表单参数实现EJB搜索的正确方法是什么?

Jpa 使用表单参数实现EJB搜索的正确方法是什么?,jpa,ejb,Jpa,Ejb,我有一个有效的豆子。我想实现一个方法,以便从JSF搜索表单接收参数,执行搜索并返回结果 因此,我的问题是: -包装我的搜索参数的方法签名是什么? -是否有一种方法可以配置Hibernate/JPA行为以进行单个选择,从而返回符合我的搜索参数的所有注册表,而不是我的实际行为(每返回一行执行一个查询) import java.util.List; 导入javax.ejb.Stateful; 导入javax.persistence.EntityManager; 导入javax.persistence.

我有一个有效的豆子。我想实现一个方法,以便从JSF搜索表单接收参数,执行搜索并返回结果

因此,我的问题是: -包装我的搜索参数的方法签名是什么? -是否有一种方法可以配置Hibernate/JPA行为以进行单个选择,从而返回符合我的搜索参数的所有注册表,而不是我的实际行为(每返回一行执行一个查询)

import java.util.List;
导入javax.ejb.Stateful;
导入javax.persistence.EntityManager;
导入javax.persistence.PersistenceContext;
导入javax.persistence.PersistenceContextType;
导入javax.persistence.TypedQuery;
导入my.package.entity.Address;
@有状态
公共类地址EJB{
@PersistenceContext(unitName=“RentACar持久化单元”,type=PersistenceContextType.EXTENDED)
私人实体管理者实体管理者;
公共列表findAll(){
TypedQuery查询=entityManager.createNamedQuery(
“Address.findAll”,Address.class);
返回query.getResultList();
}
/*这就是我想写的方法*/
公共列表findByParameter(){
TypedQuery查询=entityManager.createNamedQuery(
“Address.findAll”,Address.class);
返回query.getResultList();
}   
公共广播addNew(地址){
entityManager.persist(地址);
回信地址;
}
公共广播更新(地址){
entityManager.merge(地址);
回信地址;
}
公共无效删除(地址国家/地区){
entityManager.remove(国家/地区);
}   
}

查询本身因参数而异,方法也是如此。您可以使用不同的参数重载该方法,但似乎没有任何理由只使用一个方法。(该方法可能有可选参数,但这将在方法体(逻辑)中强制执行其他检查。)@Tiny假设我的表单有3个字段,如果我遵循方法重载的思想,我将需要8个方法。所以,另一种选择是包装表单并使用逻辑实现。所以,我的第一个问题是确定的……第二个问题呢?是否有一种方法可以配置Hibernate/JPA行为,以进行单个选择,返回符合我的搜索参数的所有注册表,而不是我的实际行为(每返回一行执行一个查询)?在键/值对机制中收集参数,如
HashMap
LinkedHashMap
,如果顺序重要,将该
Map
作为方法参数传递,并使用基于条件谓词和/或表达式的JPA criteria API动态生成查询(如果是,则代码看起来有点难看,但必须在动态生成查询时执行)。
import java.util.List;

import javax.ejb.Stateful;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import javax.persistence.PersistenceContextType;
import javax.persistence.TypedQuery;

import my.package.entity.Address;

@Stateful
public class AddressEJB {
    @PersistenceContext(unitName = "RentACar-persistence-unit",type=PersistenceContextType.EXTENDED)
    private EntityManager entityManager;

    public List<Address> findAll() {
        TypedQuery<Address> query = entityManager.createNamedQuery(
                "Address.findAll", Address.class);
        return query.getResultList();
    }
  /*This is the method I want to write*/
    public List<Address> findByParameter() {
        TypedQuery<Address> query = entityManager.createNamedQuery(
                "Address.findAll", Address.class);
        return query.getResultList();
    }   

    public Address addNew(Address address) {
        entityManager.persist(address);
        return address;
    }

    public Address update(Address address) {
        entityManager.merge(address);
        return address;
    }

    public void delete(Address country) {
        entityManager.remove(country);
    }   
}