Hibernate - Arquivos de mapeamento
Um mapeamento de objeto / relacional geralmente é definido em um documento XML. Este arquivo de mapeamento instrui o Hibernate - como mapear a classe ou classes definidas para as tabelas do banco de dados?
Embora muitos usuários do Hibernate optem por escrever o XML manualmente, existem várias ferramentas para gerar o documento de mapeamento. Esses incluemXDoclet, Middlegen e AndroMDA para os usuários avançados do Hibernate.
Vamos considerar nossa classe POJO definida anteriormente, cujos objetos persistirão na tabela definida na próxima seção.
public class Employee {
private int id;
private String firstName;
private String lastName;
private int salary;
public Employee() {}
public Employee(String fname, String lname, int salary) {
this.firstName = fname;
this.lastName = lname;
this.salary = salary;
}
public int getId() {
return id;
}
public void setId( int id ) {
this.id = id;
}
public String getFirstName() {
return firstName;
}
public void setFirstName( String first_name ) {
this.firstName = first_name;
}
public String getLastName() {
return lastName;
}
public void setLastName( String last_name ) {
this.lastName = last_name;
}
public int getSalary() {
return salary;
}
public void setSalary( int salary ) {
this.salary = salary;
}
}
Haveria uma tabela correspondente a cada objeto que você deseja fornecer persistência. Considere que os objetos acima precisam ser armazenados e recuperados na seguinte tabela RDBMS -
create table EMPLOYEE (
id INT NOT NULL auto_increment,
first_name VARCHAR(20) default NULL,
last_name VARCHAR(20) default NULL,
salary INT default NULL,
PRIMARY KEY (id)
);
Com base nas duas entidades acima, podemos definir o seguinte arquivo de mapeamento, que instrui o Hibernate como mapear a classe ou classes definidas para as tabelas do banco de dados.
<?xml version = "1.0" encoding = "utf-8"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD//EN"
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
<class name = "Employee" table = "EMPLOYEE">
<meta attribute = "class-description">
This class contains the employee detail.
</meta>
<id name = "id" type = "int" column = "id">
<generator class="native"/>
</id>
<property name = "firstName" column = "first_name" type = "string"/>
<property name = "lastName" column = "last_name" type = "string"/>
<property name = "salary" column = "salary" type = "int"/>
</class>
</hibernate-mapping>
Você deve salvar o documento de mapeamento em um arquivo com o formato <classname> .hbm.xml. Salvamos nosso documento de mapeamento no arquivo Employee.hbm.xml.
Vamos entender um pouco mais sobre os elementos de mapeamento usados no arquivo de mapeamento -
O documento de mapeamento é um documento XML com <hibernate-mapping> como o elemento raiz, que contém todos os <class> elementos
o <class>elementos são usados para definir mapeamentos específicos de classes Java para as tabelas do banco de dados. O nome da classe Java é especificado usando oname atributo do elemento de classe e do banco de dados table o nome é especificado usando o atributo da tabela.
o <meta> element é um elemento opcional e pode ser usado para criar a descrição da classe.
o <id>elemento mapeia o atributo de ID exclusivo na classe para a chave primária da tabela do banco de dados. oname atributo do elemento id refere-se à propriedade na classe e o columnatributo refere-se à coluna na tabela do banco de dados. otype atributo contém o tipo de mapeamento de hibernação, esses tipos de mapeamento serão convertidos do tipo de dados Java para SQL.
o <generator>O elemento dentro do elemento id é usado para gerar os valores da chave primária automaticamente. oclass atributo do elemento gerador é definido como native para deixar a hibernação pegar também identity, sequence, ou hilo algoritmo para criar a chave primária, dependendo dos recursos do banco de dados subjacente.
o <property>elemento é usado para mapear uma propriedade de classe Java para uma coluna na tabela de banco de dados. oname atributo do elemento refere-se à propriedade na classe e o columnatributo refere-se à coluna na tabela do banco de dados. otype atributo contém o tipo de mapeamento de hibernação, esses tipos de mapeamento serão convertidos do tipo de dados Java para SQL.
Existem outros atributos e elementos disponíveis, que serão usados em um documento de mapeamento e eu tentaria cobrir o máximo possível enquanto discuto outros tópicos relacionados ao Hibernate.