Boa tarde de novo colegas !
jgbt
Eu não entendi em que a implementação de uma classe para representar a PK e na classe principal um atributo do tipo ApartamentoPK atende mais OO do que dois atributos na classe principal…
Explicando melhor: não estou dizendo que isso não seja verdade, estou é confessando a minha ignorância.
Na verdade achei mais estranho ainda o seguinte:
Criei uma tabela Teste que só tem dois atributos ID1 e ID2, que juntos compões a PK (obviamente uma situação hipotética para estudo).
Repetindo o mesmo processo utilizado na Classe Apartamento olha o que obtive:
Classe TestePK
package com.atm.DAO;
import java.io.Serializable;
import javax.persistence.Column;
import javax.persistence.Embeddable;
/**
* Classe de Chave Primária TestePK para classe de entidade Teste
*
* @author r100320
*/
@Embeddable
public class TestePK implements Serializable {
@Column(name = "ID1", nullable = false)
private int id1;
@Column(name = "ID2", nullable = false)
private int id2;
/** Creates a new instance of TestePK */
public TestePK() {
}
/**
* Cria uma nova instância de TestePK com os valores especificados.
* @param id2 o id2 do TestePK
* @param id1 o id1 do TestePK
*/
public TestePK(int id2, int id1) {
this.id2 = id2;
this.id1 = id1;
}
}
Classe Teste
package com.atm.DAO;
import java.io.Serializable;
import javax.persistence.EmbeddedId;
import javax.persistence.Entity;
import javax.persistence.NamedQueries;
import javax.persistence.NamedQuery;
import javax.persistence.Table;
/**
* Classe de entidade Teste
*
* @author r100320
*/
@Entity
@Table(name = "Teste")
@NamedQueries( {
@NamedQuery(name = "Teste.findById1", query = "SELECT t FROM Teste t WHERE t.testePK.id1 = :id1"),
@NamedQuery(name = "Teste.findById2", query = "SELECT t FROM Teste t WHERE t.testePK.id2 = :id2")
})
public class Teste implements Serializable {
/**
* Campo de chave primária embutido
*/
@EmbeddedId
protected TestePK testePK;
/** Creates a new instance of Teste */
public Teste() {
}
/**
* Cria uma nova instância de Teste com os valores especificados.
* @param testePK o testePK do Teste
*/
public Teste(TestePK testePK) {
this.testePK = testePK;
}
/**
* Cria uma nova instância de TestePK com os valores especificados.
* @param id2 o id2 do TestePK
* @param id1 o id1 do TestePK
*/
public Teste(int id2, int id1) {
this.testePK = new TestePK(id2, id1);
}
}
Minha pergunta: qual a finalidade de TestePK ?
Se puder me explicar fico-lhe grato.