2012-07-31 65 views
3

的Netbeans給出:配置「不平衡的讀/收藏寫」爲headerFields聲明:收集僅添加到,從來不看

package net.bounceme.dur.usenet.model; 

import java.io.Serializable; 
import java.util.AbstractMap.SimpleEntry; 
import java.util.ArrayList; 
import java.util.Enumeration; 
import java.util.List; 
import java.util.logging.Level; 
import java.util.logging.Logger; 
import javax.mail.Header; 
import javax.mail.Message; 
import javax.mail.MessagingException; 
import javax.persistence.*; 

@Entity 
public class Article implements Serializable { 

    private static final long serialVersionUID = 1L; 
    private static final Logger LOG = Logger.getLogger(Article.class.getName()); 
    @Id 
    @GeneratedValue(strategy = GenerationType.IDENTITY) 
    private Long id; 
    @Column 
    private String subject; 
    @OneToMany(mappedBy = "article") 
    private List<HeaderField> headerFields = new ArrayList<>(); 

    public Article() { 
    } 

    public Article(Message message) { 
     try { 
      subject = message.getSubject(); 
      Enumeration e = message.getAllHeaders(); 

      while (e.hasMoreElements()) { 
       Header header = (Header) e.nextElement(); 
       @SuppressWarnings("unchecked") 
       SimpleEntry nameValue = new SimpleEntry(header.getName(), header.getValue()); 
       HeaderField headerField = new HeaderField(nameValue); 
       headerFields.add(headerField); 
      } 
     } catch (MessagingException ex) { 
      Logger.getLogger(Article.class.getName()).log(Level.SEVERE, null, ex); 
     } 
    } 

    public Long getId() { 
     return id; 
    } 

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

    @Override 
    public int hashCode() { 
     int hash = 0; 
     hash += (id != null ? id.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 Article)) { 
      return false; 
     } 
     Article other = (Article) 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 subject; 
    } 

    public String getSubject() { 
     return subject; 
    } 

    public void setSubject(String subject) { 
     this.subject = subject; 
    } 
} 

這讓我懷疑是否HeaderField的關係,正確地從成立Article,或此警告指示的內容。

+1

這可能是(我沒有使用NetBeans),指的是你的收藏/列表絕對沒用[你可以放棄它沒有副作用](到目前爲止),或者它可能是一個NetBeans報告錯誤。 – 2012-07-31 09:13:29

+0

好的,就像我通常那樣,我問了一個有缺陷的問題。爲什麼headerFields無用?它應該是**應該是headerFieldList中屬於一篇文章的一對多,多個HeaderField。這不是這樣嗎?當然,這只是該關係的文章方面。這是一種建立的關係嗎? – Thufir 2012-07-31 09:16:59

+0

映射應該是有效的,只是這個字段被定義爲私有的,並且沒有公共的方法來訪問它,這可能會導致警告。 (如Marko Topolnik回答) – 2012-07-31 09:26:36

回答

3

由於您使用的JPA註釋類將通過反射讀取私有字段,因此此警告不合適,您應該將其禁用。它只是指您的私人列表不會通過任何方法公開,並且該類中的代碼永遠不會讀取其內容。