Este EJB parece muy fabuloso pero me parece muy dificil el como usarlo...
Estoy usando
- NetBeans 6.1
- TopLink Essential
- Mysql 5.x (Motor de almacenamiento MyIsam)
Ejemplo:
Primera Tabla:
Código PHP:
CREATE TABLE `table1` (
`ID` int(11) NOT NULL auto_increment,
`NOMBRE` varchar(20) default NULL,
PRIMARY KEY (`ID`),
)
// SEGUNDA TABLA
CREATE TABLE `table2` (
`ID` int(11) NOT NULL auto_increment,
`NOMBRE` int(11) default NULL,
`APELLIDO` varchar(255) default NULL,
PRIMARY KEY (`ID`),
)
Código PHP:
import java.beans.PropertyChangeListener;
import java.beans.PropertyChangeSupport;
import java.io.Serializable;
import java.util.Collection;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.JoinTable;
import javax.persistence.NamedQueries;
import javax.persistence.NamedQuery;
import javax.persistence.OneToMany;
import javax.persistence.Table;
import javax.persistence.Transient;
/**
*
* @author Administrador
*/
@Entity
@Table(name = "table1")
@NamedQueries({@NamedQuery(name = "Table1.findById", query = "SELECT t FROM Table1 t WHERE t.id = :id"), @NamedQuery(name = "Table1.findByNombre", query = "SELECT t FROM Table1 t WHERE t.nombre = :nombre")})
public class Table1 implements Serializable {
@Transient
private PropertyChangeSupport changeSupport = new PropertyChangeSupport(this);
private static final long serialVersionUID = 1L;
@Id
@Column(name = "ID", nullable = false)
private Integer id;
@Column(name = "NOMBRE")
private String nombre;
@OneToMany(mappedBy="NOMBRE")
private Collection<Table2> table2;
public Table1() {
}
public Table1(Integer id) {
this.id = id;
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
Integer oldId = this.id;
this.id = id;
changeSupport.firePropertyChange("id", oldId, id);
}
public String getNombre() {
return nombre;
}
public void setNombre(String nombre) {
String oldNombre = this.nombre;
this.nombre = nombre;
changeSupport.firePropertyChange("nombre", oldNombre, nombre);
}
public Collection<Table2> getTable2() {
return table2;
}
public void setTable2(Collection<Table2> table2) {
this.table2 = table2;
}
@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 Table1)) {
return false;
}
Table1 other = (Table1) 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.dkcontrol.presupuesto.Table1[id=" + id + "]";
}
public void addPropertyChangeListener(PropertyChangeListener listener) {
changeSupport.addPropertyChangeListener(listener);
}
public void removePropertyChangeListener(PropertyChangeListener listener) {
changeSupport.addPropertyChangeListener(listener);
}
}
Código PHP:
import java.io.Serializable;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.NamedQueries;
import javax.persistence.NamedQuery;
import javax.persistence.Table;
/**
*
* @author Administrador
*/
@Entity
@Table(name = "table2")
@NamedQueries({@NamedQuery(name = "Table2.findById", query = "SELECT t FROM Table2 t WHERE t.id = :id"), @NamedQuery(name = "Table2.findByNombre", query = "SELECT t FROM Table2 t WHERE t.nombre = :nombre"), @NamedQuery(name = "Table2.findByApellido", query = "SELECT t FROM Table2 t WHERE t.apellido = :apellido")})
public class Table2 implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@Column(name = "ID", nullable = false)
private Integer id;
@ManyToOne
@JoinColumn(name = "ID", referencedColumnName = "NOMBRE", insertable = false, updatable = false)
@Column(name = "NOMBRE")
private Integer nombre;
@Column(name = "APELLIDO")
private String apellido;
public Table2() {
}
public Table2(Integer id) {
this.id = id;
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public Integer getNombre() {
return nombre;
}
public void setNombre(Integer nombre) {
this.nombre = nombre;
}
public String getApellido() {
return apellido;
}
public void setApellido(String apellido) {
this.apellido = apellido;
}
@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 Table2)) {
return false;
}
Table2 other = (Table2) 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.dkcontrol.presupuesto.Table2[id=" + id + "]";
}
}
He Copiado varios codigos de ejemplos, pero al ejecutarlos siempre me da algun error, como la definicion errónea del mappedBy, @JoinColumn, en fin lo unico que he podido crear y entender, es una relacion de @OneToOne...
Si alguien tienen algun tutorial bueno en Español, se lo agradeceria mucho el link ó explicarme el funcionamiento de las anotaciones para crear las relaciones entre tablas. Ya hasta lei parte de las Especificafiones del EJB3 de sun pero nada, no logro la BENDITA relación...
PD: sería excelente que netbeans tuviera un asistente para crear las relaciones de las tablas sin tener que usar el motor InnoDB para crearlas...
Gracias...