2015-10-20 18 views
0

我是新的JSP/EL/EJB世界裏,所以你要在數請... heheh我不能叫@NamedQueries

我的問題是一個PREVIOUS Q?

所以在延續上述問題的評論/回答建議使用customerFacade.findByUserName(String userName),但問題是我不能使用這樣的@NamedQuery。

我的代碼如下:

爲CustomerFacade

package Session; 

//imports ** 

@Stateless 
public class CustomerFacade extends AbstractFacade<Customer> { 

    @PersistenceContext(unitName = "OnlineStorePU") 
    private EntityManager em; 

    @Override 
    protected EntityManager getEntityManager() { 
    return em; 
    } 

    public CustomerFacade() { 
    super(Customer.class); 
    } 

} 

客戶

package Entity; 

//imports*** 

@Entity 
@Table(name = "customer") 
@XmlRootElement 
@NamedQueries({ 
@NamedQuery(name = "Customer.findAll", query = "SELECT c FROM Customer c"), 
@NamedQuery(name = "Customer.findById", query = "SELECT c FROM Customer c WHERE c.id = :id"), 
@NamedQuery(name = "Customer.findByName", query = "SELECT c FROM Customer c WHERE c.name = :name"), 
@NamedQuery(name = "Customer.findByMobile", query = "SELECT c FROM Customer c WHERE c.mobile = :mobile"), 
@NamedQuery(name = "Customer.findByEmail", query = "SELECT c FROM Customer c WHERE c.email = :email"), 
@NamedQuery(name = "Customer.findByAddress", query = "SELECT c FROM Customer c WHERE c.address = :address"), 
@NamedQuery(name = "Customer.findByFax", query = "SELECT c FROM Customer c WHERE c.fax = :fax"), 
@NamedQuery(name = "Customer.findByTelephone", query = "SELECT c FROM Customer c WHERE c.telephone = :telephone"), 
@NamedQuery(name = "Customer.findByUsername", query = "SELECT c FROM Customer c WHERE c.username = :username")}) 

public class Customer implements Serializable { 
    /** 
    * all generated attributes from DB import Wizard 
    * no findAll() or findByXxxxx() is declared here 
    * So that is the reason I Assume that all @NamedQueries{} 
    * are somehow creating functions with Name as @NameQuery 
    * 
    */ 
} 

我的問題是我需要實現@Na medQuery作爲函數,如果是這樣的話?

回答

1

你必須使用類似這樣

em.createNamedQuery("Customer.findByUsername") 
.setParameter("username", "Smith") 
.getResultList(); 
+0

這是在客戶或爲CustomerFacade類! – T04435

+0

是的,創建一個可以從代碼中調用的方法 – Flagman

0

您可以使用TypedQuey

final TypedQuery<Customer> query = em.createNamedQuery(
      "Customer.findByName", Customer.class) 
      .setParameter("name", "Ron"); 
List<Customer> = query.getResultList(); 
+0

這是在Customer還是CustomerFacade類中! – T04435

+0

@ T04435:在'CustomerFacade'類中。 –

+0

@ T04435:這是否適合您? –