Hibernate - FK compondo uma PK!

5 respostas
R

Olá amigos, depois de olhar diversos exemplos, ainda não consegui resolver esse problema. Tenho uma classe ProgramaUnidade que é extend de uma classe Programa, o id da classe Programa é FK na classe ProgramaUnidade, só que essa mesmo FK tem que compor a PK da mesma classe ProgramaUnidade.
Vlw a atenção.
Minhas classes estão assim:

Programa

@Entity(name="t_programa")
@Inheritance(strategy=InheritanceType.JOINED)
@MappedSuperclass
public class Programa {
	
	@Id  
	@GeneratedValue(strategy=GenerationType.SEQUENCE, generator="programa")  
	@SequenceGenerator(name="programa", sequenceName="seq_programa", allocationSize=1)
	private int id;

public int getId() {
		return id;
	}


	public void setId(int id) {
		this.id = id;
	}

ProgramaUnidade

@Entity(name = "t_programaunidade")

public class ProgramaUnidade extends Programa {

@Column(columnDefinition="NUMBER(1,0)")
	@NotEmpty(message = "Status deve ser informado!!")
	private int status;

	@Temporal(TemporalType.TIMESTAMP)
	@NotEmpty(message = "Data de vigencia não nula")
	private Date dataVigencia;

@ManyToOne
	@JoinColumn(name="programa_id")
	@ForeignKey(name="FK_PROGR_PROGR_UNIDADE")
	private Programa programa;

public Programa getPrograma() {
		return programa;
	}


	public void setPrograma(Programa programa) {
		this.programa = programa;
	}

public int getStatus() {
		return status;
	}

	public void setStatus(int status) {
		this.status = status;
	}

	public Date getDataVigencia() {
		return dataVigencia;
	}

	public void setDataVigencia(Date dataVigencia) {
		this.dataVigencia = dataVigencia;
	}
}

5 Respostas

Filipe_Chagas

Rapaz… antes de ficar quebrando a cabeça com este impasse na implementação, te aconselho a dar uma revisada na tua modelagem.
Tem certeza que ProgramaUnidade , que herda de Programa, precisa ter também uma foreign key de Programa???

Filipe_Chagas

Acho que você está fazendo uma confusão entre modelagem entidade-relacional e modelagem de classes…
este é um problema comum.
Dê uma repensada nessa modelagem, tenho certeza que você vai encontrar o problema.

Só uma dica:

ProgramaUnidade é um Programa

ou

ProgramaUnidade tem um Programa

Ou uma coisa, ou outra, as duas não pode ser.

R

Filipe sim ProgramaUnidade é um Programa. O que acontece é que a classe ProgramaUnidade serve para pegar os Programas do SUS que cada Unidade utiliza. Uma Unidade pode ter ou não um devido Programa, logo ProgramaUnidade tem todos os atributos da classe Programa. Obrigado pela atenção

Filipe_Chagas

Rapaz, é difícil opinar sem conhecer o domínio em questão.
Mas baseado nas informações que você passou aqui, falando em linguagem Entidade-Relacionamento , ProgramaUnidade nada mais é que uma entidade de ligação entre as entidades Programa e Unidade.
Logo, quando falamos de modelagem de classes, é muito provável que você não precise implementar a classe ProgramaUnidade, antes porém, as classes Programa e Unidade, de forma que possuam, no mapeamento objeto relacional, um relacionamento muitos para muitos.

R

Tenho classes q precisam de um Programa cadastrado na Unidade para seu funcionamento como realizar as Consultas de uma determinada Unidade por exemplo, como também tenho Classe que se relaciona apenas com o Programa, como as Faixas Etárias de determinado Programa, como também tenho atributos apenas para ProgramaUnidade como status e data de vigência de um Programa numa determinada Unidade, por isso usei o conceito de herança. Obrigado pela atenção novamente.

Criado 21 de abril de 2009
Ultima resposta 22 de abr. de 2009
Respostas 5
Participantes 2