簡體   English   中英

當rowKey屬性是主鍵時,為什么JPA實體拋出異常?

[英]Why JPA entity throws exception when rowKey attribute is the primary key?

我正在使用JavaEE構建一個非常簡單的Java全棧應用程序,因此我使用帶有Prime Faces 6.2的JSF在前端和EJB中呈現xthml,在后端使用Hibernate和postgresql呈現JPA,但是,當我設置rowKey時=來自Prime Faces的dataTable組件的“#{person.id}”。 拋出下一個異常。

“00:13:36,307 ERROR [io.undertow.request](默認任務-55)UT005023:對/javaee-app/faces/listPersons.xhtml的異常處理請求:javax.servlet.ServletException ...由:java引起。 lang.NullPointerException”

listPersons.xhtml
Prime Faces DataTable Component(opening tag and its attributes)

<p:dataTable id="persons"
                 value="#{personBean.persons}"
                 var="person"
                 editable="true"
                 rowKey="#{person.id}"
                 selection="#{personBean.personSelected}"
                 selectionMode="single">

嘗試呈現頁面時出現的異常是這樣的。 在此輸入圖像描述

但是,如果我設置rowKey =“#{person.name}”或甚至rowKey =“#{person.email}”而不是rowKey =“#{person.id}”,問題就會消失並且xthml頁面會正確呈現。

<p:dataTable id="persons"
             value="#{personBean.persons}"
             var="person"
             editable="true"
             rowKey="#{person.name}"
             selection="#{personBean.personSelected}"
             selectionMode="single">

with rowKey =“#{person.name}”或rowKey =“#{person.email}”xhtml頁面正確呈現“

Postgresql數據庫的人

MODEL /實體

@Entity
@Table(name = "person")
@NamedQueries({
@NamedQuery(name = "Person.findAll", query = "SELECT p FROM Person p"), 
@NamedQuery(name = "Person.findById", query = "SELECT p FROM Person p 
WHERE p.id = :id")
, @NamedQuery(name = "Person.findByName", query = "SELECT p FROM 
Person p WHERE p.name = :person_name")
, @NamedQuery(name = "Person.findByLastname", query = "SELECT p FROM 
Person p WHERE p.lastname = :lastname")
, @NamedQuery(name = "Person.findByEmail", query = "SELECT p 
FROM Person p WHERE p.email = :email")
, @NamedQuery(name = "Person.findByPhone", query = "SELECT p 
FROM Person p WHERE p.phone = :phone")})
public class Person implements Serializable {
private static final long serialVersionUID = 1L;

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer id;

@Basic(optional = false)
@NotNull
@Size(min = 1, max = 60)
@Column(name = "person_name")
private String name;

@Basic(optional = false)
@NotNull
@Size(min = 1, max = 60)
private String lastname;

@Basic(optional = false)
@NotNull
@Size(min = 1, max = 60)
private String email;

@Size(max = 60)
private String phone;

@OneToMany(mappedBy = "person", fetch = FetchType.EAGER)
private List<Users> users;

public Person() { }

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

public int getId() {
    return id;
}

public void setId(int id) {
    this.id = id;
}

public String getName() {
    return name;
}

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

public String getLastname() {
    return lastname;
}

public void setLastname(String lastname) {
    this.lastname = lastname;
}


public String getEmail() {
    return email;
}

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

public String getPhone() {
    return phone;
}

public void setPhone(String phone) {
    this.phone = phone;
}

public List<Users> getUsers() {
    return users;
}

public void setUsers(List<Users> users) {
    this.users = users;
}

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

@Override
public boolean equals(Object object) {
    if (!(object instanceof Person)) {
        return false;
    }
    Person other = (Person) object;
    if ((this.id == null && other.id != null) || (this.id != null && !this.id.equals(other.id))) {
        return false;
    }
    return true;
}

@Override
public String toString() {
    return "Person [id = " + id + ", name=" + name
            + ", lastName=" + lastname + " email=" + email + ", phone=" + phone + "]";
}

有什么想法解決這個問題嗎? 提前致謝

我還添加了應用程序服務器中生成的錯誤的圖像,在我的例子中是Wildfly 8.2

picture1 Wildfly 8.2

picture2 Wildfly 8.2

id的類型為Integer:

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer id;

getter返回int的位置:

public int getId() {
    return id;
}

將getId更改為返回Integer。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM