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