2012-07-31 70 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注释类将通过反射读取私有字段,因此此警告不合适,您应该将其禁用。它只是指您的私人列表不会通过任何方法公开,并且该类中的代码永远不会读取其内容。