Olá, pessoal!
Preciso de ajuda com um mapeamento que fiz no hibernate.
Tenho duas tabelas: personal e personal_type. A tabela personal possui uma foreign key para a personal_type. Tenho os seguintes dados nas tabelas (todos como VARCHAR e as primeiras colunas são chaves):
personal:
‘PESSOA1’, ‘Fulando da Silva’, ‘CLIENTE’
‘PESSOA2’, ‘Cicrano da Sirva’, ‘FORNECEDOR’
‘PESSOA3’, ‘Gertrudes da Silva’, ‘CLIENTE’
‘PESSOA4’, ‘Genoveva da Silva’, ‘CLIENTE’
personal_type:
‘CLIENTE’, ‘Cliente da Empresa’
‘FORNECEDOR’, ‘Fornecedor da Empresa’
Após instanciar objetos [color=blue]Personal[/color] ou [color=blue]PersonalType[/color], consigo alterar seus atributos corretamente, com exceção da foreign key.
Estou tentando este código:
import org.hibernate.*;
import org.hibernate.cfg.*;
public class Main
{
public static void main(String args[])
{
Configuration config = new Configuration();
config.configure("hibernate.cfg.xml");
SessionFactory factory = config.buildSessionFactory();
Session session = factory.openSession();
Personal personal = (Personal) session.load(Personal.class, "PESSOA2");
PersonalType type = (PersonalType) session.load(PersonalType.class, "CLIENTE");
personal.setType(type);
session.flush();
session.close();
}
}
mas ele não atualiza a foreign key da tabela personal. Eu quero trocar a referência da foreign key do registro 2 de “FORNECEDOR” para “CLIENTE”.
Onde estou errando?
Mais dados:
Mapeamento das Tabelas
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
<!-- Mapeamento da classe Personal -->
<class name="Personal">
<id name="code"/>
<property name="name"/>
<many-to-one name="type" class="PersonalType" insert="false" update="false">
<column name="code"/>
</many-to-one>
</class>
<!-- Mapeamento da classe PersonalType -->
<class name="PersonalType" table="personal_type">
<id name="code"/>
<property name="description"/>
</class>
</hibernate-mapping>
hibernate.cfg.xml
<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD//EN"
"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory>
<property name="connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="connection.url">jdbc:mysql://localhost/hibernate</property>
<property name="dialect">org.hibernate.dialect.MySQLDialect</property>
<property name="connection.username">root</property>
<property name="connection.password">123456</property>
<property name="connection.autocommit">true</property>
<property name="connection.pool_size">100</property>
<property name="show_sql">true</property>
<mapping resource="maps.hbm.xml"/>
</session-factory>
</hibernate-configuration>
log4j.properties
log4j.rootLogger=DEBUG, dest1
log4j.appender.dest1=org.apache.log4j.ConsoleAppender
log4j.appender.dest1.layout=org.apache.log4j.PatternLayout
log4j.appender.dest1.layout.ConversionPattern=%d %-5p %-5c{3} %x -> %m%n
Classe Personal
public class Personal
{
private String code;
private String name;
private PersonalType type;
public String getCode()
{
return code;
}
public void setCode(String code)
{
this.code = code;
}
public String getName()
{
return name;
}
public void setName(String name)
{
this.name = name;
}
public PersonalType getType()
{
return type;
}
public void setType(PersonalType type)
{
this.type = type;
}
}
Classe PersonalType
public class PersonalType
{
private String code;
private String description;
public String getCode()
{
return code;
}
public void setCode(String code)
{
this.code = code;
}
public String getDescription()
{
return description;
}
public void setDescription(String type)
{
this.description = type;
}
}