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
[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…