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
,但它们都是
。及其相应的ANDEL
在验证保存在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";
}