JavaFX,TableView和JPA
问题描述:
我是JavaFX的新手,我试图将一个旧的Swing应用程序重构为JavaFX。
我也使用JPA(与EclipseLink实现)来保存/检索数据。
所以我定义了一些注解的POJO。
这里我下面的注解POJO:JavaFX,TableView和JPA
import java.io.Serializable;
import javax.persistence.Basic;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
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;
import javax.persistence.Transient;
/**
*
* @author alex
*/
@Entity
@Table(name = "materiale", catalog = "elledia", schema = "")
public class Materiale implements Serializable {
@Transient
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Basic(optional = false)
@Column(name = "id")
private Long id;
@Basic(optional = false)
@Column(name = "colata")
private String colata;
@Basic(optional = false)
@Column(name = "dimensione")
private String dimensione;
@Basic(optional = false)
@Column(name = "specifica")
private String specifica;
@Basic(optional = false)
@Column(name = "unita_misura")
private String unitaMisura;
@Column(name = "version")
private Integer version;
@ManyToOne (fetch = FetchType.LAZY)
@JoinColumn (name = "certificato_id")
private Certificato certificato;
public Materiale(Long id, String colata, String dimensione, String specifica, String unitaMisura, Certificato certificato) {
this.id = id;
this.colata = colata;
this.dimensione = dimensione;
this.specifica = specifica;
this.unitaMisura = unitaMisura;
this.certificato = certificato;
}
public Long getId() {
return id;
}
public void setId(Long id) {
Long oldId = this.id;
this.id = id;
}
public String getColata() {
return colata;
}
public void setColata(String colata) {
String oldColata = this.colata;
this.colata = colata;
}
public String getDimensione() {
return dimensione;
}
public void setDimensione(String dimensione) {
String oldDimensione = this.dimensione;
this.dimensione = dimensione;
}
public String getSpecifica() {
return specifica;
}
public void setSpecifica(String specifica) {
String oldSpecifica = this.specifica;
this.specifica = specifica;
}
public String getUnitaMisura() {
return unitaMisura;
}
public void setUnitaMisura(String unitaMisura) {
String oldUnitaMisura = this.unitaMisura;
this.unitaMisura = unitaMisura;
}
public Integer getVersion() {
return version;
}
public void setVersion(Integer version) {
Integer oldVersion = this.version;
this.version = version;
}
public Certificato getCertificato() {
return certificato;
}
public void setCertificato(Certificato certificato) {
Certificato oldCertificato = this.certificato;
this.certificato = certificato;
}
@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 Materiale)) {
return false;
}
Materiale other = (Materiale) 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 "com.alessandrodonato.elledia.certificati.gui.Materiale[ id=" + id + " ]";
}
}
我遇到一些麻烦的TableViewcontrol:
- 好吧,我读过各种后如何绑定POJO到的TableView。
- 好的,我必须定义一个ObservableList并将它绑定到TableView来填充和更新它。
- ,但将其定义我已经使用SimpleStringProperty的字符串,而不是在我的POJO属性和注释不符合这方面的工作...
任何想法?
答
public class MaterialeProperty {
private Materiale materiale;
public MaterialeProperty (Materiale materiale) {
this.materiale= materiale;
this.setId(materiale.getId());
}
private LongProperty id = new SimpleLongProperty() {
public void set(long l) {
super.set(l);
materiale.setId(l);
}
};
public final Long getId() {
return id.get();
}
public final void setId(Long value) {
id.set(value);
}
public LongProperty idProperty() {
return id;
}
....
}
+0
你想说明什么? – tarrsalah 2013-04-15 15:28:33
+0
该问题的目的确实是如何使用实体作为POJO,这是如何做到的,通过包装。 – user2259890 2013-04-17 02:07:12
答
适用于我而不改变我的POJO。
TableColumn coluna1 = new TableColumn("Nome");
TableColumn coluna2 = new TableColumn("Álbum");
TableColumn coluna3 = new TableColumn("Imagem");
TableColumn coluna4 = new TableColumn("Descrição");
TableColumn coluna5 = new TableColumn("Tags");
coluna1.setCellValueFactory(
new PropertyValueFactory<>("nome")
);
coluna2.setCellValueFactory(
new PropertyValueFactory<>("album")
);
...
tabelaItens.getColumns().addAll(coluna1, coluna2, coluna3, coluna4, coluna5);
tabelaItens.setItems(FXCollections.observableArrayList(itens));
POJO:
@Entity
public class Item implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id")
private Long id;
@ManyToOne
private Album album;
@Column(name = "nome")
private String nome;
@Temporal(javax.persistence.TemporalType.TIMESTAMP)
@Column(name = "data_criacao")
private Calendar dataCriacao;
@Column(name = "data_imagem")
@Temporal(javax.persistence.TemporalType.TIMESTAMP)
private Calendar dataImagem;
@Lob
@Basic(fetch = FetchType.LAZY)
@Column(name = "imagem")
private byte[] imagem;
@Column(name = "tipo_imagem")
private String tipoImagem;
@Column(name = "descricao")
private String descricao;
@Column(name = "tags")
private String tags;
...
}
谢谢,我会的! – AlexD 2013-04-08 15:16:50
“Java POJO对象” - 讨论冗余冗余! :D – ryvantage 2016-10-13 01:36:34