2012-05-14 157 views
0

我正在開發一個使用EJB,JPA和netbeans的Java Web EE應用程序。我已經創建了一個名爲SQL用戶註冊和登錄,並命名爲prescripts其中有3個外鍵指的用戶的主鍵idusers(文檔ID,pharmid,patid)其它表的表。 我也命名爲用戶淨豆實體bean,並命名爲UsersFacade會話bean和prescripts實體bean創建:prescripts和會話bean:PrescriptsFacade。爲什麼ejb中的外鍵聲明爲對象(實體)?

我的問題是這樣的:

爲什麼在用戶EJB的所有變量(列)被聲明爲他們(字符串字符串,整數整數等),並在prescripts聲明爲用戶?

//users.java 
@Id 
@GeneratedValue(strategy = GenerationType.IDENTITY) 
@Basic(optional = false) 
@Column(name = "idusers") 
private Integer idusers; 
@Column(name = "user_type") 
private String userType; 
@Column(name = "name") 
private String name; 
@Column(name = "nickname") 
private String nickname; 

//prescripts.java 
@Id 
@GeneratedValue(strategy = GenerationType.IDENTITY) 
@Basic(optional = false) 
@Column(name = "idprescripts") 
private Integer idprescripts; 
@Column(name = "data") 
private String data; 
@JoinColumn(name = "pharm_id", referencedColumnName = "idusers") 
@ManyToOne 
private Users users; 
@JoinColumn(name = "doc_id", referencedColumnName = "idusers") 
@ManyToOne 
private Users users1; 
@JoinColumn(name = "pat_id", referencedColumnName = "idusers") 
@ManyToOne 
private Users users2; 

對於用戶來說我用這個代碼在一個servlet在SQL基地中插入一行:

Users currentUsers; 
currentUsers = new Users(); 
String Type = request.getParameter("user_type"); 
String Name = request.getParameter("name"); 
String Nickname = request.getParameter("nickname"); 
currentUsers.setUserType(Type); 
currentUsers.setName(Name); 
currentUsers.setNickname(Nickname); 
UsersFacade.create(currentUsers); 

我應該怎樣在prescripts這種方式插入行?

這不起作用(它顯示錯誤空指針異常):

currentPresc = new Prescripts(); 
String PatID = request.getParameter("pat_id"); 
String DocID = request.getParameter("doc_id"); 
String PharmID = request.getParameter("pharm_id"); 
String Data = request.getParameter("data"); 
int patid = Integer.parseInt(PatID); 
int docid = Integer.parseInt(DocID); 
int pharmid = Integer.parseInt(PharmID); 
currentUsers = UsersFacade.find(patid); 
currentPresc.setUsers(currentUsers); 
currentUsers = UsersFacade.find(docid); 
currentPresc.setUsers1(currentUsers); 
currentUsers = UsersFacade.find(pharmid); 
currentPresc.setUsers2(currentUsers); 
currentPresc.setData(Data); 
PrescriptsFacade.create(currentPresc); 

我跳過了set和get方法和簡化的原因一些變量。請任何幫助真的非常感謝,我很stucked與現在這個2周:'(


我送你的用戶和prescripts全類:

Prescripts.java

package entities; 

import java.io.Serializable; 
import javax.persistence.Basic; 
import javax.persistence.Column; 
import javax.persistence.Entity; 
import javax.persistence.GeneratedValue; 
import javax.persistence.GenerationType; 
import javax.persistence.Id; 
import javax.persistence.JoinColumn; 
import javax.persistence.ManyToOne; 
import javax.persistence.NamedQueries; 
import javax.persistence.NamedQuery; 
import javax.persistence.Table; 


@Entity 
@Table(name = "prescripts") 
@NamedQueries({ 
    @NamedQuery(name = "Prescripts.findAll", query = "SELECT p FROM Prescripts p"), 
    @NamedQuery(name = "Prescripts.findByIdprescripts", query = "SELECT p FROM Prescripts p WHERE p.idprescripts = :idprescripts"), 
    @NamedQuery(name = "Prescripts.findByData", query = "SELECT p FROM Prescripts p WHERE p.presc = :presc")}) 
public class Prescripts implements Serializable { 
    private static final long serialVersionUID = 1L; 
    @Id 
    @GeneratedValue(strategy = GenerationType.IDENTITY) 
    @Basic(optional = false) 
    @Column(name = "idprescripts") 
    private Integer idprescripts; 

    @JoinColumn(name = "doc_id", referencedColumnName = "idusers") 
    @ManyToOne 
    private Users doc_id; 

    @JoinColumn(name = "pat_id", referencedColumnName = "idusers") 
    @ManyToOne 
    private Users pat_id; 

    @JoinColumn(name = "pharm_id", referencedColumnName = "idusers") 
    @ManyToOne 
    private Users pharm_id; 
    @Column(name = "presc") 
    private String presc; 

    public Prescripts() { 
    } 

    public Prescripts(Users pat_id, Users pharm_id, Users doc_id, String presc) { 

     this.pharm_id = pharm_id; 
     this.doc_id = doc_id; 
     this.pat_id = pat_id; 
     this.presc = presc; 


    } 

    public Integer getIdprescripts() { 
     return idprescripts; 
    } 

    public void setIdprescripts(Integer idprescripts) { 
     this.idprescripts = idprescripts; 
    } 

    public String getPresc() { 
     return presc; 
    } 

    public void setPresc(String presc) { 
     this.presc = presc; 
    } 


    public Users getPharmId() { 
     return pharm_id; 
    } 

    public void setPharmId(Users pharm_id) { 
     this.pharm_id = pharm_id; 
    } 


    public Users getDocId() { 
     return doc_id; 
    } 

    public void setDocId(Users doc_id) { 
     this.doc_id = doc_id; 
    } 

    public Users getPatId() { 
     return pat_id; 
    } 

    public void setPatId(Users pat_id) { 
     this.pat_id = pat_id; 
    } 

    @Override 
    public int hashCode() { 
     int hash = 0; 
     hash += (idprescripts != null ? idprescripts.hashCode() : 0); 
     return hash; 
    } 

    @Override 
    public boolean equals(Object object) { 
     // TODO: Warning - this method won't work in the case the id fields are not set 
     if (!(object instanceof Prescripts)) { 
      return false; 
     } 
     Prescripts other = (Prescripts) object; 
     if ((this.idprescripts == null && other.idprescripts != null) || (this.idprescripts != null && !this.idprescripts.equals(other.idprescripts))) { 
      return false; 
     } 
     return true; 
    } 

    @Override 
    public String toString() { 
     return "entities.Prescripts[idprescripts=" + idprescripts + "]"; 
    } 

} 

Users.java

package entities; 

import java.io.Serializable; 
import java.util.Collection; 
import java.util.List; 
import javax.persistence.*; 
import javax.xml.bind.annotation.XmlTransient; 


@Entity 
@Table(name = "users") 
@NamedQueries({ 
    @NamedQuery(name = "Users.findAll", query = "SELECT u FROM Users u"), 
    @NamedQuery(name = "Users.findByIdusers", query = "SELECT u FROM Users u WHERE u.idusers = :idusers"), 
    @NamedQuery(name = "Users.findByUserType", query = "SELECT u FROM Users u WHERE u.userType = :userType"), 
    @NamedQuery(name = "Users.findByNickname", query = "SELECT u FROM Users u WHERE u.nickname = :nickname"), 
    @NamedQuery(name = "Users.findByName", query = "SELECT u FROM Users u WHERE u.name = :name"), 
    @NamedQuery(name = "Users.findByPassword", query = "SELECT u FROM Users u WHERE u.password = :password"), 
    @NamedQuery(name = "Users.findByEmail", query = "SELECT u FROM Users u WHERE u.email = :email"), 
    @NamedQuery(name = "Users.findByCity", query = "SELECT u FROM Users u WHERE u.city = :city"), 
    @NamedQuery(name = "Users.findByStreet", query = "SELECT u FROM Users u WHERE u.street = :street"), 
    @NamedQuery(name = "Users.findByAt", query = "SELECT u FROM Users u WHERE u.at = :at"), 
    @NamedQuery(name = "Users.findByAmka", query = "SELECT u FROM Users u WHERE u.amka = :amka"), 
    @NamedQuery(name = "Users.findByAfm", query = "SELECT u FROM Users u WHERE u.afm = :afm"), 
    @NamedQuery(name = "Users.findByVerify", query = "SELECT u FROM Users u WHERE u.verify = :verify")}) 
public class Users implements Serializable { 
    @OneToMany(mappedBy = "pat_id") 
    private List<Prescripts> prescriptsList; 
    @OneToMany(mappedBy = "doc_id") 
    private List<Prescripts> prescriptsList1; 
    @OneToMany(mappedBy = "pharm_id") 
    private List<Prescripts> prescriptsList2; 



    private static final long serialVersionUID = 1L; 
    @Id 

    @GeneratedValue(strategy = GenerationType.IDENTITY) 
    @Basic(optional = false) 
    @Column(name = "idusers") 
    private Integer idusers; 

    @Column(name = "user_type") 
    private String userType; 
    @Column(name = "name") 
    private String name; 
    @Column(name = "nickname") 
    private String nickname; 
    @Column(name = "password") 
    private String password; 
    @Column(name = "email") 
    private String email; 
    @Column(name = "city") 
    private String city; 
    @Column(name = "street") 
    private String street; 
    @Column(name = "AT") 
    private String at; 
    @Column(name = "AMKA") 
    private String amka; 
    @Column(name = "AFM") 
    private String afm; 
    @Column(name = "verify") 
    private Boolean verify; 

    public Users() { 
    } 

     public Users(String userType,String name,String nickname, String password, String email, String city, String street, String at, 
      String amka, String afm, Boolean verify) 
    { 
     this.userType= userType; 
     this.name= name; 
     this.nickname= nickname; 
     this.password= password; 
     this.email = email; 
     this.city = city; 
     this.street = street; 
     this.at = at; 
     this.amka = amka; 
     this.afm = afm; 
     this.verify=verify; 

    } 

    public Integer getIdusers() { 
     return idusers; 
    } 

    public void setIdusers(Integer idusers) { 
     this.idusers = idusers; 
    } 

    public String getUserType() { 
     return userType; 
    } 

    public void setUserType(String userType) { 
     this.userType = userType; 
    } 

    public String getName() { 
     return name; 
    } 

    public void setName(String name) { 
     this.name = name; 
    } 

    public String getNickname() { 
     return nickname; 
    } 

    public void setNickname(String nickname) { 
     this.nickname = nickname; 
    } 

    public String getPassword() { 
     return password; 
    } 

    public void setPassword(String password) { 
     this.password = password; 
    } 

    public String getEmail() { 
     return email; 
    } 

    public void setEmail(String email) { 
     this.email = email; 
    } 

    public String getCity() { 
     return city; 
    } 

    public void setCity(String city) { 
     this.city = city; 
    } 

    public String getStreet() { 
     return street; 
    } 

    public void setStreet(String street) { 
     this.street = street; 
    } 

    public String getAt() { 
     return at; 
    } 

    public void setAt(String at) { 
     this.at = at; 
    } 

    public String getAmka() { 
     return amka; 
    } 

    public void setAmka(String amka) { 
     this.amka = amka; 
    } 

    public String getAfm() { 
     return afm; 
    } 

    public void setAfm(String afm) { 
     this.afm = afm; 
    } 

    public Boolean getVerify() { 
     return verify; 
    } 

    public void setVerify(Boolean verify) { 
     this.verify = verify; 
    } 

    @Override 
    public int hashCode() { 
     int hash = 0; 
     hash += (idusers != null ? idusers.hashCode() : 0); 
     return hash; 
    } 

    @Override 
    public boolean equals(Object object) { 
     // TODO: Warning - this method won't work in the case the id fields are not set 
     if (!(object instanceof Users)) { 
      return false; 
     } 
     Users other = (Users) object; 
     if ((this.idusers == null && other.idusers != null) || (this.idusers != null && !this.idusers.equals(other.idusers))) { 
      return false; 
     } 
     return true; 
    } 

    @Override 
    public String toString() { 
     return "entities.Users[idusers=" + idusers + "]"; 
    } 



    public List<Prescripts> getPrescriptsList() { 
     return prescriptsList; 
    } 

    public void setPrescriptsList(List<Prescripts> prescriptsList) { 
     this.prescriptsList = prescriptsList; 
    } 

    public List<Prescripts> getPrescriptsList1() { 
     return prescriptsList1; 
    } 

    public void setPrescriptsList1(List<Prescripts> prescriptsList1) { 
     this.prescriptsList1 = prescriptsList1; 
    } 

    public List<Prescripts> getPrescriptsList2() { 
     return prescriptsList2; 
    } 

    public void setPrescriptsList2(List<Prescripts> prescriptsList2) { 
     this.prescriptsList2 = prescriptsList2; 
    } 





} 
+0

檢查什麼是空,檢查部署錯誤。包含錯誤和堆棧。 – James

+0

該錯誤是這樣的:警告:StandardWrapperValve [的TestServlet]:PWC1406:Servlet.service()進行的servlet的TestServlet在的javax.servlet在controller.TestServlet.doPost(TestServlet.java:233) 拋出異常 顯示java.lang.NullPointerException .http.HttpServlet.service(HttpServlet.java:754) at ...就這樣......我應該怎麼知道什麼是空的?我從JSP提供的數據(ID的我給100%是正確的)。我使用完全相同的方式插入到用戶表中,它的工作原理 – BreJohn

+0

SOMEONE ?????接受任何想法... – BreJohn

回答

1

主要問題似乎是聲明User-class中的變量作爲Integer,但Prescript中的「user_id-variable」聲明爲User。

這是一個簡單的方式EJB3的作品。你在思考sql和關係數據庫。您將表的主鍵(例如Users.idusers)定義爲列,但使用自然對象定義對其他對象(準確地說,實體)的引用。因此,Prescripts.users被聲明爲一個用戶對象。 EJB的平臺會照顧這個轉變成一個數據庫列(在這種情況下,很可能命名爲users_idusers),用正確的類型(在這種情況下,整數),但這是照顧的,你不應該需要關心這一點。

你應該去通過EJB3教程或兩個 - 有很多這樣的例子,並確保您完成教程。你似乎錯過了一些基礎知識。還要注意你的代碼可能更簡單。通常不需要「@Column」-annotations,通常不需要mapped_by,列名同上等。還可以使用單數名稱(用戶而不是用戶)。主鍵的通用標準簡單地爲@Id Long id,這使得記住所有實體的主鍵名稱變得容易(但有些更喜歡不同的名稱)。

要回答你的實際的問題,我們需要更多的信息,包括哪些是TestServlet.java線233.你的代碼似乎或多或少是正確的,但它是別人難以驗證。從EntityManger/facade找到用戶對象,然後將其設置到Prescipts對象中是正確的方法。

+0

錯誤在這一行:PrescriptsFacade.create(currentPresc); 如果我刪除這一行,它顯示沒有錯誤... 從我的理解來看,它試圖將用戶的所有數據放在一列列表中,這就是爲什麼它不起作用! – BreJohn

+0

需要更多代碼才能爲您提供幫助。 PrescriptsFacade.create(currentPresc);不可能拋出NullPointerException。我建議您正確運行一兩個教程,刪除代碼並重新開始您的新知識。 – dpnmn

+0

一切工作正常,除非當我嘗試將數據存儲在第二個表與立面腳本!此外,實體的規定和prescriptsFacade已由net bean自動創建,爲什麼我必須刪除所有內容並重新開始?你能告訴我在哪裏可以找到在ejb中使用2個表的教程,我有紅色的一切並沒有多大幫助... – BreJohn

0

在java中,實體之間的關係(在實體 - 關係模型)被表示爲,(一到一個)引用的對象(一個一對多)

A到對象的引用或列表關係數據庫實現實體(表中的行)之間的關係作爲外鍵,它與另一個表中的行的主鍵匹配。

(單詞「關係」的「關係型數據庫」並實際上只是意味着在一個表中的列(元組)是相互關聯的......外鍵的東西是加法。)

在設計數據庫表之前,我一般都認爲聰明才能開始使用適當的實體關係商店模型...

相關問題