Tenho no meu banco em MySQL uma tabela Cliente e uma tabela Vendedor, um cliente pode ter apenas 1 vendedor e um vendedor pode estar em vários clientes.
CREATE TABLE `cliente` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`data_cadastro` datetime DEFAULT NULL,
`razao_social` varchar(50) DEFAULT NULL,
`nome_fantasia` varchar(50) DEFAULT NULL,
`cnpj` varchar(18) NOT NULL,
`incricao_estadual` varchar(18) DEFAULT NULL,
`telefone` varchar(15) DEFAULT NULL,
`fax` varchar(15) DEFAULT NULL,
`email` varchar(50) DEFAULT NULL,
`nome_contato` varchar(50) DEFAULT NULL,
`vendedor` int(11) DEFAULT NULL,
`desconto_sobre_frete` decimal(12,2) DEFAULT NULL,
`valor_minimo_frete` decimal(10,2) DEFAULT NULL,
`pagina_guia_ruas` smallint(6) DEFAULT NULL,
`empresa` int(11) DEFAULT NULL,
`nome_pais` varchar(50) DEFAULT 'Brasil',
`sigla_pais` varchar(2) DEFAULT 'BR',
`tipo` smallint(2) DEFAULT '1',
`status` smallint(2) DEFAULT '1',
`endereco_internet` varchar(120) DEFAULT NULL,
`observacao` text,
PRIMARY KEY (`cnpj`),
UNIQUE KEY `id` (`id`),
KEY `FK_cliente` (`empresa`),
KEY `FK_cliente_vendedor` (`vendedor`),
CONSTRAINT `FK_cliente` FOREIGN KEY (`empresa`) REFERENCES `empresa` (`id`) ON DELETE CASCADE,
CONSTRAINT `FK_cliente_vendedor` FOREIGN KEY (`vendedor`) REFERENCES `vendedor` (`id`)
)
CREATE TABLE `vendedor` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`nome` varchar(50) DEFAULT NULL,
`cpf` varchar(18) NOT NULL,
`identidade` varchar(18) DEFAULT NULL,
`percentual_comissao` decimal(3,2) DEFAULT '5.00',
`status` smallint(2) DEFAULT '1',
`observacao` text,
`telefone` varchar(15) DEFAULT NULL,
`celular` varchar(15) DEFAULT NULL,
`email` varchar(120) DEFAULT NULL,
PRIMARY KEY (`cpf`),
UNIQUE KEY `id` (`id`)
)
Mapeamentos:
Cliente
<hibernate-mapping>
<class name="org.transporter.sys.pojos.Cliente" table="cliente" lazy="false" catalog="transport">
<id name="cnpj" type="string">
<column name="cnpj" length="18" />
<generator class="identity" />
</id>
<many-to-one name="vendedor" class="org.transporter.sys.pojos.Vendedor" fetch="select">
<column name="vendedor" length="18" />
</many-to-one>
<many-to-one name="empresa" class="org.transporter.sys.pojos.Empresa" fetch="select">
<column name="empresa" length="10" />
</many-to-one>
<property name="id" type="int">
<column name="id" not-null="true" unique="true" />
</property>
<property name="dataCadastro" type="timestamp">
<column name="data_cadastro" length="19" />
</property>
<property name="razaoSocial" type="string">
<column name="razao_social" length="50" />
</property>
<property name="nomeFantasia" type="string">
<column name="nome_fantasia" length="50" />
</property>
<property name="incricaoEstadual" type="string">
<column name="incricao_estadual" length="18" />
</property>
<property name="telefone" type="string">
<column name="telefone" length="15" />
</property>
<property name="fax" type="string">
<column name="fax" length="15" />
</property>
<property name="email" type="string">
<column name="email" length="50" />
</property>
<property name="nomeContato" type="string">
<column name="nome_contato" length="50" />
</property>
<property name="descontoSobreFrete" type="big_decimal">
<column name="desconto_sobre_frete" precision="12" />
</property>
<property name="valorMinimoFrete" type="big_decimal">
<column name="valor_minimo_frete" precision="10" />
</property>
<property name="paginaGuiaRuas" type="java.lang.Short">
<column name="pagina_guia_ruas" />
</property>
<property name="nomePais" type="string">
<column name="nome_pais" length="50" />
</property>
<property name="siglaPais" type="string">
<column name="sigla_pais" length="2" />
</property>
<property name="tipo" type="java.lang.Short">
<column name="tipo" />
</property>
<property name="status" type="java.lang.Short">
<column name="status" />
</property>
<property name="enderecoInternet" type="string">
<column name="endereco_internet" length="120" />
</property>
<property name="observacao" type="string">
<column name="observacao" length="65535" />
</property>
</class>
</hibernate-mapping>
Vendedor
<hibernate-mapping>
<class name="org.transporter.sys.pojos.Vendedor" table="vendedor" lazy="false" catalog="transport">
<id name="cpf" type="string">
<column name="cpf" length="18" />
<generator class="identity" />
</id>
<property name="id" type="int">
<column name="id" not-null="true" unique="true" />
</property>
<property name="nome" type="string">
<column name="nome" length="50" />
</property>
<property name="identidade" type="string">
<column name="identidade" length="18" />
</property>
<property name="percentualComissao" type="big_decimal">
<column name="percentual_comissao" precision="3" />
</property>
<property name="status" type="java.lang.Short">
<column name="status" />
</property>
<property name="observacao" type="string">
<column name="observacao" length="65535" />
</property>
<property name="telefone" type="string">
<column name="telefone" length="15" />
</property>
<property name="celular" type="string">
<column name="celular" length="15" />
</property>
<property name="email" type="string">
<column name="email" length="120" />
</property>
<set name="clientes" inverse="true">
<key>
<column name="vendedor" length="18" />
</key>
<one-to-many class="org.transporter.sys.pojos.Cliente" />
</set>
</class>
</hibernate-mapping>
Na tabela cliente tem uma única linha com o código 1 na coluna vendedor, na tabela vendedor tem uma única linha com a id 1, ou seja, a associação é válida.
Porém quando faço uma consulta para listar TUDO em cliente, dá essa exceção:
No row with the given identifier exists: [org.transporter.sys.pojos.Vendedor#1]
Mas existe a linha com a id 1 na tabela Vendedor.
Criteria criteria = session.createCriteria(Cliente.class).addOrder(Order.asc("razaoSocial"));
Certamente estou fazendo alguma coisa errada ou entendi errado alguma coisa nesses relacionamentos do Hibernate, alguém com experiência poderia me apontar o que há de errado?
Agradeço