Jpa 通过JSF+;持久化时在数据库中获取null参数;EJB应用程序

Jpa 通过JSF+;持久化时在数据库中获取null参数;EJB应用程序,jpa,primefaces,ejb,Jpa,Primefaces,Ejb,我正在创建我的第一个JSF+EJB应用程序测试,当我在JSF表单中插入基本数据时,单击,除了一个输入,任务都正确完成了。在形式I中有两个输入字段,#1在我的db.table中设置为VARCHAR,#2为INT,但它们都是。及其相应的ANDEL 在验证保存在DB中的信息时,只有字段#1正确分配,#2设置为,我不明白为什么 我以前做过使用Hibernate进行持久化的应用程序,效果很好,我是否缺少一些Annotation或@EJB模块中的某些内容 这是我的密码: <h:form>

我正在创建我的第一个
JSF+EJB
应用程序测试,当我在JSF表单中插入基本数据时,单击
,除了一个输入,任务都正确完成了。在形式I中有两个输入字段,#1在我的db.table中设置为
VARCHAR
,#2为
INT
,但它们都是
。及其相应的AND
EL

在验证保存在DB中的信息时,只有字段#1正确分配,#2设置为,我不明白为什么

我以前做过使用
Hibernate
进行持久化的应用程序,效果很好,我是否缺少一些
Annotation
@EJB
模块中的某些内容

这是我的密码:

<h:form>
        <p:panelGrid columns="2" >                
            <p:outputLabel value="Owner"/>
            <p:inputText value="#{accountMB.account.ownername}"/>
            <p:outputLabel value="Balance"/>
            <p:inputText value="#{accountMB.account.balance}"/>
        </p:panelGrid>
            <p:commandButton value="Create Account" action="#{accountMB.commandButton()}" ajax="false"/>        
    </h:form>
会话bean:

    @Stateless
public class AccountFacade extends AbstractFacade<Account> {
    @PersistenceContext(unitName = "bankAppPU")
    private EntityManager em;

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

    public AccountFacade() {
        super(Account.class);
    }

    public Account openAccount(String ownername, int balance){
        Account ac = new Account(balance, ownername);
        em.persist(ac);
        return ac;
    }
    public void closeAccount(int accountNumber){
            Account ac = em.find(Account.class, accountNumber);
            if(ac != null)
                em.remove(ac);            
    }
    public void deposit(int accountNumber, int amount){
            Account ac = em.find(Account.class, accountNumber);
            if(ac != null)
                ac.deposit(amount);
    }
    public int withdraw(int accountNumber, int amount){
            Account ac = em.find(Account.class, accountNumber);
            return (ac != null)? ac.withdraw(amount): 0;
    }
    public List<Account> listAccounts(){
         return em.createNamedQuery("Account.findAll").getResultList();
    }    
}

在应用程序的多个地方打印了
balance
之后,发现我的错误在数据库本身,因为我意外地设置了
balance INT(11)
,因此任何大于设置格式的数字都将设置为
null

    @Stateless
public class AccountFacade extends AbstractFacade<Account> {
    @PersistenceContext(unitName = "bankAppPU")
    private EntityManager em;

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

    public AccountFacade() {
        super(Account.class);
    }

    public Account openAccount(String ownername, int balance){
        Account ac = new Account(balance, ownername);
        em.persist(ac);
        return ac;
    }
    public void closeAccount(int accountNumber){
            Account ac = em.find(Account.class, accountNumber);
            if(ac != null)
                em.remove(ac);            
    }
    public void deposit(int accountNumber, int amount){
            Account ac = em.find(Account.class, accountNumber);
            if(ac != null)
                ac.deposit(amount);
    }
    public int withdraw(int accountNumber, int amount){
            Account ac = em.find(Account.class, accountNumber);
            return (ac != null)? ac.withdraw(amount): 0;
    }
    public List<Account> listAccounts(){
         return em.createNamedQuery("Account.findAll").getResultList();
    }    
}
  @Entity
@Table(name = "account")
@NamedQueries({
    @NamedQuery(name = "Account.findAll", query = "SELECT a FROM Account a")})
public class Account implements Serializable {
    private static final long serialVersionUID = 1L;
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Basic(optional = false)
    @Column(name = "ID")
    private Integer id;
    @Column(name = "BALANCE")
    private Integer balance;
    @Basic(optional = false)
    @NotNull
    @Size(min = 1, max = 100)
    @Column(name = "OWNERNAME")
    private String ownername;

    public Account() {
    }

    public Account(Integer id) {
        this.id = id;
    }

    public Account(Integer id, String ownername) {
        this.id = id;
        this.ownername = ownername;
    }
// setters ..  getters ..                     
    public void deposit(int amount){
        this.balance += amount;
    }
    public int withdraw(int amount){
        return (amount > this.balance)? 0 : (this.balance-=amount);
    }      

}
<p:inputText value="#{accountMB.account.balance}" converter="javax.faces.Integer" /> 
public String commandButton(){
        facade.openAccount(this.account.getOwnername(), Integer.parseInt(this.account.getBalance()));
        return "response?faces-redirect=true";
    }