Hibernate... Descobrir a qual coluna o atributo está vinculado[RESOLVIDO]

Tenho um sistema no qual utilizo o hibernate como framework para acesso de dado…

Estou utilizando arquivos xml para mapeamentos relacionados a tabelas e beans no hibernate…

então quando vou definir uma coluna de uma certa tabela , eu defino assim no xml

   <property column="SALDO" length="10" name="saldo" not-null="true" type="java.math.BigDecimal"/>

até aí tudo bem…

nesse caso , estou dizendo ao hibernate que a coluna SALDO da tabela está relacionado ao atributo saldo do bean respectivo

Existe algum comando no hibernate em tempo de execução em que eu possa descobrir, por exemplo a qual coluna da tabela o atributo do bean respectivo está vinculado?

Amigo, use annotations e Reflection.
fica a dica

Estou usando o reflection para pegar os atributos dos beans, para descobrir qual bean é , para buscar os métodos dos beans, pois são mais de 30 beans…

Quanto ao annotations… se fosse um novo projeto até concordaria…mas como o sistema já está todo desenvolvido em cima de xml … e toda a estrutura pronta…creio que não seria uma boa idéa… pois vai mecher em toda a estrutura de acesso ao banco de dados do sistema…

Realmente fazer uma mudança assim é sempre bom pensar bem antes, mas concordo com o paulo, se fosse você usava annotations pois é muito simples, elimina a configuração do xml. ex.:

@Entity
@Table(name="PROCESS")
public class Process implements Serializable{

...

        @Id
	@Column(name="INTERNAL_TRACKING_NUMBER", unique=true, nullable=false, length=15)
	public String getInternalTrackingNumber(){....}

        @Column(name="AMOUNT_CLAIM_LOCAL")
	public BigDecimal getAmountClaimLocal(){....}

	//bi-directional many-to-one association to User
	@ManyToOne(optional=true, fetch= FetchType.EAGER)
	@JoinColumn(nullable=true, name="USERID_OUTSIDE")
	public User getUserOutside() {
		return this.userOutside;
	}

	//bi-directional many-to-one association to User
        @ManyToOne
	@JoinColumn(name="USERID_IN_HOUSE")
	public User getUserInhouse() {
		return this.userInhouse;
	}

	public void setUserInhouse(User userInhouse) {
		this.userInhouse = userInhouse;
	}
	
	//bi-directional many-to-one association to User
	@ManyToOne(optional=true, fetch= FetchType.EAGER)
	@JoinColumn(nullable=true, name="USERID_ASSISTANT")
	public User getUserAssistant() {
		return this.userAssistant;
	}
}

Só os relacionamentos entre entidades que é mais chatinho, até você entender como funciona corretamente, depois é tudo muito simples.

Agora quanto a sua pergunta

Cara isso você que define, quem você definir será o vinculo entre coluna/tabela e atributo/bean…

[]'s

Isso pode te atender.

http://docs.jboss.org/hibernate/core/3.5/api/org/hibernate/SessionFactory.html#getAllClassMetadata()

[quote=leopoldof]Tenho um sistema no qual utilizo o hibernate como framework para acesso de dado…

Estou utilizando arquivos xml para mapeamentos relacionados a tabelas e beans no hibernate…

então quando vou definir uma coluna de uma certa tabela , eu defino assim no xml

   <property column="SALDO" length="10" name="saldo" not-null="true" type="java.math.BigDecimal"/>

até aí tudo bem…

nesse caso , estou dizendo ao hibernate que a coluna SALDO da tabela está relacionado ao atributo saldo do bean respectivo

Existe algum comando no hibernate em tempo de execução em que eu possa descobrir, por exemplo a qual coluna da tabela o atributo do bean respectivo está vinculado?[/quote]

Nao sei qual o motivo disso, mas, tem o debug do compilador, que em tempo de execucao voce pode ver tudo que esta acontecendo por “traz dos panos”, inclusive ver determinado atributo de onde é, ate o hash code dele e etc…

Mas annotations deixa a entidade bizarra. Sei que XML é chato, mas “é o que tem pra hoje” no Hibernate do Java para mapear sem deixar a entidade um lixo e amarrada ao banco.

Isso que o lsjunior passou deve ajudar a chegar onde você quer.

Olá a todos…Resolvido o problema…

O problema em si seria ler um arquivo com os registros de uma tabela dentro dele, gerar um insert…e jogar esses dados para o banco…
Mas como meu hibernate está configurado para gerar um sequence a cada novo registro, e como o registro vindo do arquivo DEVE ser mantido o codigo original…
O que fiz foi gerar um insert em eql mesmo e executar…
e para gerar esse sql de insert é que queria buscar a relação dos nomes dos atributos dos beans com o nome na tabela do banco para gerar um insert certo,pois pode muito bem acontecer…de ser criado um atributo com o nome diferente ao nome da coluna da tabela em questão…

Por sorte minha… nesse sistema também é usado um padrão para criação de nomes de atributos de beans…sempre o mesmo nome da coluna da tabela a que se refere…

então ficou fácil… só usei os comandos para pegar os nomes dos atributos e gerar o insert correto…assim

com esse comando eu posso pegar o nome, o tipo, e tudo que necessito para gerar o insert…

e por via das dúvidas…conferi todos os nomes dos atributos para ver se seguiam mesmo o padrão…

só que fica meio instável, pois se algum dia for criado algum bean que não siga este padrão… pode causar algum erro…