Chaves estrangeiras em java CRUD completo com JSP

1 resposta
jspprogramaçãojavahibernate
J

Alguém experiente pode me ajudar estou aprendendo a trabalhar com chave estrangeiras em Java com JSP. Preciso de fazer um CRUD completo em uma aplicação, que possuo. Estou trabalhando com Hibernate sem frameworks.

A lógica, que estou tentando desenvolver, é COMPOSIÇÃO entre a entidade projetoInicio e termoAberturaProjeto. Um projeto pode possuir um termos, onde, cada termo pertence a um projeto (@OneToOne). No formulário de cadastro do termo deve ter um SELECT, para listar os projetos.

No formulário listo os projetos, segue alguns trechos do código (Ao submeter o formulário chamo O CONTROLE, que pede ajudar a Classe helpe, que verifica qual ação deve ser executada):

<tr class="field">
							<td><p align="justify"><b>Projeto <font color="red">*</font></b></td>
							<td><p align="justify">
								<select id="projetoinicio" name="projetoinicio">
									<option id="projetoinicio">Selecione</option>
									<%
										List<ProjetoInicio> projetoInicios = (List<ProjetoInicio>) request.getAttribute("projetoInicios");
										for(ProjetoInicio ProjetoInicio: projetoInicios){
											out.println("<option value='" + ProjetoInicio.getCodigo() + "'>"
													                      + ProjetoInicio.getProjeto());
										}
									%>	
								</select><p class="hint">[Informar o projeto.]</p>
							</td>
				</tr>

Trechos do Bean.java

@Entity
@Table(name = "termoabertura")

public class TermoAberturaProjeto {

@OneToOne
@JoinColumn(name="projetoinicio", nullable = false)

private ProjetoInicio projetoinicio = new ProjetoInicio(); 

public ProjetoInicio getProjetoinicio() {
		return projetoinicio;
	}
	public void setProjetoinicio(ProjetoInicio projetoinicio) {
		this.projetoinicio = projetoinicio;
	}

Alguns trechos da Classe TermoAberturaProjeto.java

public class CadastrarTermoAberturaProjeto implements InterfaceCommand {
	
	private InterfaceTermoAberturaProjetoDAO termoAberturaProjetoDAO;	
	public CadastrarTermoAberturaProjeto(InterfaceTermoAberturaProjetoDAO termoAberturaProjetoDAO) {
		super();
		this.termoAberturaProjetoDAO = termoAberturaProjetoDAO;
	}
	@Override
	public String execute(HttpServletRequest request, HttpServletResponse response)	throws Exception{
		
		try {
						
			//  Preencher o Bean com os valores do request
			TermoAberturaProjeto termoAberturaProjeto = new TermoAberturaProjeto();			
						
			termoAberturaProjeto.setConcordo(request.getParameter("concordo"));
Aqui setor todos os atributos, porem, não sei como setar a chave estrangeira, aqui? Seria o código do PROJETO (Entidade projetoInicio)

Após setar adiciono e chamo o DAO!!!

Trecho da classe termoAberturaDAO.java

@Override
	public void salvar(TermoAberturaProjeto termoAberturaProjeto) throws Exception  {
		
		Connection con = Conexao.getConnection();
		PreparedStatement ps=null;
		try {
			
			//Validar teste de duplicação de registro aqui!
			//SELECT * FROM projeto WHERE codigodoprojeto = 'codigodoprojeto';
					
			String sqlInsert = "INSERT INTO termoabertura( termoaberturaprojeto, projeto, codigoprojeto, versao, data, autor, notarevisao, aprovacao, objetivo, justificativa, smart, eap, requisito, marco, parteinteressada, restricao,permissao, risco, orcamento, concordo, projetoinicio) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)";
			ps = con.prepareStatement(sqlInsert, Statement.RETURN_GENERATED_KEYS);
			
			ps.setString(1, termoAberturaProjeto.getTermoaberturaprojeto());
.....set
//Não sei, se está certo à linha abaixo:
ps.setObject(21, termoAberturaProjeto.getProjetoinicio().getCodigo());
						
			ps.executeUpdate();
			
			ResultSet rs = ps.getGeneratedKeys();
	        rs.next();
	        Long idGerado = rs.getLong(1);
	        termoAberturaProjeto.setCodigo(idGerado);
						
			ps.close();

Estou aprendendo com muita dificuldade, por isso peço ajuda de alguem experiente! Preciso de adicionar ao CRUD uma ação com chave estrangeira. Obrigado!

1 Resposta

J

Problema resolvido! A solução foi recuperar o valor corretamente do select (projeto selecionado), quando o usuário selecionar resgato o valor, pelo request converto em um inteiro e armazeno o resultado em uma variável. Dai seto o atributo setProjetoinicio acessando o metodo que seleciona a chave estrangeira:

Integer projetoinicio = Integer.valueOf(request.getParameter(“projetoinicio”));
termoAberturaProjeto.setProjetoinicio(projetoInicioDAO.getProjetoInicio(projetoinicio));

Criado 25 de abril de 2017
Ultima resposta 28 de abr. de 2017
Respostas 1
Participantes 1