2012-05-14 160 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到对象的引用或列表关系数据库实现实体(表中的行)之间的关系作为外键,它与另一个表中的行的主键匹配。

(单词“关系”的“关系型数据库”并实际上只是意味着在一个表中的列(元组)是相互关联的......外键的东西是加法。)

在设计数据库表之前,我一般都认为聪明才能开始使用适当的实体关系商店模型...

相关问题