Reputation: 2509
I've made some changes on my application. I am quite sure that it has become slow when loading data from database due to changes on the entities (and this after going through some profilings on Netbeans IDE).
What I have added is some methods and transient variables. Here is one Entity of my JPA entities. The exact question is is there something wrong with it?
/**
*
* @author Houssem
*/
@Entity
@Table(name = "t_feeder")
@XmlAccessorType(XmlAccessType.PROPERTY)
@XmlRootElement
@NamedQueries({
@NamedQuery(name = "Feeder.findAll", query = "SELECT f FROM Feeder f"),
@NamedQuery(name = "Feeder.findById", query = "SELECT f FROM Feeder f WHERE f.id = :id"),
@NamedQuery(name = "Feeder.findByIsVip", query = "SELECT f FROM Feeder f WHERE f.isVip = :isVip"),
@NamedQuery(name = "Feeder.findByFeederNumber", query = "SELECT f FROM Feeder f WHERE f.feederNumber = :feederNumber"),
@NamedQuery(name = "Feeder.findByPeriority", query = "SELECT f FROM Feeder f WHERE f.periority = :periority"),
@NamedQuery(name = "Feeder.findBySceneX", query = "SELECT f FROM Feeder f WHERE f.sceneX = :sceneX"),
@NamedQuery(name = "Feeder.findByPrimaryStation", query = "SELECT f FROM Feeder f WHERE f.primaryStationId = :ps"),
@NamedQuery(name = "Feeder.findByPsAndNumber", query = "SELECT f FROM Feeder f WHERE f.primaryStationId = :ps AND f.feederNumber = :number"),
@NamedQuery(name = "Feeder.findBySceneY", query = "SELECT f FROM Feeder f WHERE f.sceneY = :sceneY")})
public class Feeder implements Serializable {
private static final long serialVersionUID = 1L;
public static final String FIND_BY_NUMBER = "Feeder.findByFeederNumber";
public static final String FIND_BY_PS = "Feeder.findByPrimaryStation";
public static final String FIND_BY_PS_AND_NUMBER = "Feeder.findByPsAndNumber";
transient private PropertyChangeSupport propertySupport;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Basic(optional = false)
@Column(name = "id")
private Long id;
@Column(name = "is_vip")
private boolean isVip;
@Lob
@Column(name = "note", length = 65535)
private String note;
@Basic(optional = false)
@Column(name = "feederNumber")
private String feederNumber;
@Column(name = "periority")
private Integer periority;
@Column(name = "scene_x")
private Integer sceneX;
@Column(name = "scene_y")
private Integer sceneY;
@OneToMany(cascade = {CascadeType.MERGE, CascadeType.PERSIST, CascadeType.REFRESH}, fetch = FetchType.LAZY, mappedBy = "feederId")
private Collection<SecondaryStation> secondaryStationCollection;
@OneToMany(cascade = CascadeType.ALL, mappedBy = "feederId")
private Collection<Port> portCollection;
@OneToMany(cascade = CascadeType.REMOVE, mappedBy = "feederId", fetch = FetchType.LAZY)
private Collection<StationContinuity> sourceStationContinuityCollection;
@OneToMany(cascade = CascadeType.REMOVE, mappedBy = "linkToFeederId", fetch = FetchType.LAZY)
private Collection<StationContinuity> targetStationContinuityCollection;
@OneToMany(cascade = CascadeType.ALL, mappedBy = "feederId", fetch = FetchType.LAZY)
private Collection<AlarmedFeeder> alarmedFeederCollection;
@OneToMany(cascade = CascadeType.ALL, mappedBy = "feederId", fetch = FetchType.LAZY)
private Collection<Comment> commentCollection;
@OneToMany(cascade = CascadeType.ALL, mappedBy = "feederId", fetch = FetchType.LAZY)
private Collection<FeederLoading> feederLoadingCollection;
@OneToMany(cascade = {CascadeType.MERGE, CascadeType.PERSIST, CascadeType.REFRESH}, mappedBy = "feederId", fetch = FetchType.LAZY)
private Collection<ConnectorNode> connectorNodeCollection;
@OneToMany(cascade = CascadeType.ALL, mappedBy = "feederId")
private Collection<Signalization> signalizationCollection;
@JoinColumn(name = "primaryStationId", referencedColumnName = "id")
@ManyToOne(optional = false)
private PrimaryStation primaryStationId;
@OneToMany(mappedBy = "feederId")
private Collection<Link> linkCollection;
@Column(name = "date_synchronization")
@Temporal(TemporalType.TIMESTAMP)
private Date synchronizationDate;
@Column(name = "date_modification")
@Temporal(TemporalType.TIMESTAMP)
private Date modificationDate;
@Column(name = "synchronized")
private boolean isSynchronized;
//_______________ Export List Ref objects ________________
transient private Collection<SecondaryStation> secondaryStationsRef;
transient private Collection<StationContinuity> sourceStationContinuitysRef;
transient private Collection<StationContinuity> targetStationContinuitysRef;
transient private Collection<Comment> commentsRef;
transient private Collection<ConnectorNode> connectorNodesRef;
transient private Collection<Signalization> signalizationsRef;
transient private Collection<EquipmentFileItem> equipmentFileItemsRef;
//Les port c'est automatique, puis avec get tjrs
//Getters & Setters - used only to add references, these objects are not added to DB
public Collection<EquipmentFileItem> getEquipmentFileItemsRef() {
return equipmentFileItemsRef;
}
public void setEquipmentFileItemsRef(Collection<EquipmentFileItem> equipmentFileItemsRef) {
this.equipmentFileItemsRef = equipmentFileItemsRef;
}
public Collection<SecondaryStation> getSecondaryStationsRef() {
return secondaryStationsRef;
}
public void setSecondaryStationsRef(Collection<SecondaryStation> secondaryStationCollection) {
this.secondaryStationsRef = secondaryStationCollection;
}
public Collection<StationContinuity> getSourceStationContinuitiesRef() {
return sourceStationContinuitysRef;
}
public void setSourceStationContinuitiesRef(Collection<StationContinuity> sourceStationContinuitysRef) {
this.sourceStationContinuitysRef = sourceStationContinuitysRef;
}
public Collection<StationContinuity> getTargetStationContinuitiesRef() {
return targetStationContinuitysRef;
}
public void setTargetStationContinuitiesRef(Collection<StationContinuity> targetStationContinuitysRef) {
this.targetStationContinuitysRef = targetStationContinuitysRef;
}
public Collection<Comment> getCommentsRef() {
return commentsRef;
}
public void setCommentsRef(Collection<Comment> commentsRef) {
this.commentsRef = commentsRef;
}
public Collection<ConnectorNode> getConnectorNodesRef() {
return connectorNodesRef;
}
public void setConnectorNodesRef(Collection<ConnectorNode> connectorNodesRef) {
this.connectorNodesRef = connectorNodesRef;
}
public Collection<Signalization> getSignalizationsRef() {
return signalizationsRef;
}
public void setSignalizationsRef(Collection<Signalization> signalizationsRef) {
this.signalizationsRef = signalizationsRef;
}
//_______________ End Export Stuff________________
public Feeder() {
propertySupport = new PropertyChangeSupport(this);
}
public Feeder(Long id) {
this.id = id;
}
public Feeder(Long id, String feederNumber) {
this.id = id;
this.feederNumber = feederNumber;
}
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public boolean getIsVip() {
return isVip;
}
public void setIsVip(boolean isVip) {
this.isVip = isVip;
}
public String getNote() {
return note;
}
public void setNote(String note) {
this.note = note;
}
public String getFeederNumber() {
return feederNumber;
}
public void setFeederNumber(String feederNumber) {
this.feederNumber = feederNumber;
}
public Integer getPeriority() {
return periority;
}
public void setPeriority(Integer periority) {
this.periority = periority;
}
public Integer getSceneX() {
return sceneX;
}
public void setSceneX(Integer sceneX) {
this.sceneX = sceneX;
}
public Integer getSceneY() {
return sceneY;
}
public void setSceneY(Integer sceneY) {
this.sceneY = sceneY;
}
public Collection<SecondaryStation> fetchSecondaryStationCollection() {
return secondaryStationCollection;
}
public void setSecondaryStationCollection(Collection<SecondaryStation> secondaryStationCollection) {
this.secondaryStationCollection = secondaryStationCollection;
}
public Collection<Port> fetchPortCollection() {
return portCollection;
}
public Collection<Port> getPortCollection() {
return portCollection;
}
public void setPortCollection(Collection<Port> portCollection) {
this.portCollection = portCollection;
}
public Collection<StationContinuity> fetchSourceStationContinuityCollection() {
return sourceStationContinuityCollection;
}
public void setSourceStationContinuityCollection(Collection<StationContinuity> stationContinuityCollection) {
this.sourceStationContinuityCollection = stationContinuityCollection;
}
public Collection<StationContinuity> fetchTargetStationContinuityCollection() {
return targetStationContinuityCollection;
}
public void setTargetStationContinuityCollection(Collection<StationContinuity> stationContinuityCollection1) {
this.targetStationContinuityCollection = stationContinuityCollection1;
}
public Collection<AlarmedFeeder> fetchAlarmedFeederCollection() {
return alarmedFeederCollection;
}
public void setAlarmedFeederCollection(Collection<AlarmedFeeder> alarmedFeederCollection) {
this.alarmedFeederCollection = alarmedFeederCollection;
}
public Collection<Comment> fetchCommentCollection() {
return commentCollection;
}
public void setCommentCollection(Collection<Comment> commentCollection) {
this.commentCollection = commentCollection;
}
public Collection<FeederLoading> fetchFeederLoadingCollection() {
return feederLoadingCollection;
}
public void setFeederLoadingCollection(Collection<FeederLoading> feederLoadingCollection) {
this.feederLoadingCollection = feederLoadingCollection;
}
public Collection<ConnectorNode> fetchConnectorNodeCollection() {
return connectorNodeCollection;
}
public void setConnectorNodeCollection(Collection<ConnectorNode> connectorNodeCollection) {
this.connectorNodeCollection = connectorNodeCollection;
}
public Collection<Signalization> fetchSignalizationCollection() {
return signalizationCollection;
}
public void setSignalizationCollection(Collection<Signalization> signalizationCollection) {
this.signalizationCollection = signalizationCollection;
}
public long getPrimaryStationId() {
if (primaryStationId != null) {
return primaryStationId.getId();
}
return 0;
}
public PrimaryStation fetchPrimaryStation() {
return primaryStationId;
}
public void setPrimaryStationId(PrimaryStation primaryStationId) {
this.primaryStationId = primaryStationId;
}
public Collection<Link> fetchLinkCollection() {
return linkCollection;
}
public void setLinkCollection(Collection<Link> linkCollection) {
this.linkCollection = linkCollection;
}
public void addPropertyChangeListener(PropertyChangeListener listener) {
propertySupport.addPropertyChangeListener(listener);
}
public void removePropertyChangeListener(PropertyChangeListener listener) {
propertySupport.removePropertyChangeListener(listener);
}
public Date getSynchronizationDate() {
return synchronizationDate;
}
public void setSynchronizationDate(Date synchronizationDate) {
this.synchronizationDate = synchronizationDate;
}
public Date getModificationDate() {
return modificationDate;
}
public void setModificationDate(Date modificationDate) {
this.modificationDate = modificationDate;
}
public boolean isIsSynchronized() {
return isSynchronized;
}
public void setIsSynchronized(boolean isSynchronized) {
this.isSynchronized = isSynchronized;
}
@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 Feeder)) {
return false;
}
Feeder other = (Feeder) 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 "Feeder[ number=" + this.feederNumber + " ]";
}
}
Upvotes: 2
Views: 844
Reputation: 1687
The entity Feeder has a lot!!!! of one-to-many relationships because of that all you queries will be slow(eclipselink has no issue with that).It would be more efficient if you transform all the one-to-many to unidirectional many-to-one (also the entity will look more clear and comprehensible ).
Upvotes: 1