Bom estou precisando de duas classes em uma lista
requisição e usuario
no meu bd a tabela de requisições tem uma chave estrangeira Usuario
então eu precisaria do usuario para fazer isso user.setId(rs.getLong(“idusuario”));
publicList<Requisicao>getList(){List<Requisicao>requisicoes=newArrayList<>();Stringsql="SELECT * FROM computador_requisicao";try{PreparedStatementstmt=con.prepareStatement(sql);ResultSetrs=stmt.executeQuery();while(rs.next()){Requisicaoreq=newRequisicao();Usuariouser=newUsuario();req.setId(rs.getLong("id"));user.setId(rs.getLong("idusuario"));req.setNome(rs.getString("nome"));req.setData(rs.getDate("data_requisicao"));req.setMotivo(rs.getString("Observacao"));requisicoes.add();}stmt.close();rs.close();}catch(SQLExceptionex){returnnull;}returnrequisicoes;}
Alguém poderia me dar uma luuz de como eu resolveria essa situação?
Você precisa pegar esse id de usuário e realizar a consulta que retorna o usuário, ou jah retornar o usuário junto com um JOIN e obter os campos usando aliases.
LostSpirit
não man tipo meu objetivo com essa lista é mostrar todos as requisições no banco de dados
e nessa tabela de requisições tem a chave estrangeira idusuario
que é o id do usuario que a criou
minha dificuldade toda está em retornar esse valor para o metodo setId que está em outra classe
eu não quero pegar um usuario em especifico .
Lucas_Camara
Requisição possui um usuário?
Lucas_Camara
Não entendi essa dúvida. Onde está esse método setId?
LostSpirit
tipo eu quero retornar uma lista com todas as requisições no bd
essa tabela de requisições possui uma chave estrangeira IdUsuario
eu queria retornar todos os registros em uma tableview inclusive o id do usuario que criou a req
porém são duas classes diferentes
Requisições Usuario, UsuarioDAO,RequisicaoDAO
essa user.setId está na classe usuario ai que está o problema eu não conseguiria adicionar esse campo na lista pq ele está em outra classe
se fosse assim iria funcionar de boa
porém eu preciso desse campo e não faço ideia de como adicionar 2 classes na lista
LostSpirit
eu tou com um pouco de dúvida nessa parte
eu não utilizei extend em nenhuma
eu não sei se utilizo
Usuario extends requisição ou
Requisicao extends Usuario
Lucas_Camara1 like
Nem um nem outro. Vc precisa entender a relação entre POSSUI UM e É UM. Nesse caso, penso que uma Requisicao possui um Usuario:
publicclassRequisicao{privateLongid;privateUsuariosolicitante;// ... demais campos da requisição// getters e setters}
Seguindo isso, basta retornar o usuário responsável por criar a Requisicao em cada requisição.
LostSpirit
**
“lucastody:
Nem um nem outro. Vc precisa entender a relação entre POSSUI UM e É UM. Nesse caso, penso que uma Requisicao possui um Usuario:
publicclassRequisicao{privateLongid;privateUsuariosolicitante;// ... demais campos da requisição// getters e setters}
Seguindo isso, basta retornar o usuário responsável por criar a Requisicao em cada requisição.
**
aaa sim, mesmo usuario criando a requisição
a requisição possui um usario?
ou usuario possui uma requisição kk
eu n consigo entender oq mudaria
no caso eu teria que fazer assim na list: solicitante.setId(rs.getLong(“idusuario”));
?
e uma outra dúvida eu preciso usar extends em meus DAO
exemplo
usuarioDAO extends Usuario?
Lucas_Camara
Nesse caso, um usuário pode ter mais de uma requisição. Eu como usuário, posso criar N requisições.
Lembrando que o Usuário terá apenas o ID, todos os outros campos continuarão nulos.
LostSpirit
e como eu conseguiria passar esse solicitante para a lista?
Lucas_Camara
Qual lista?
LostSpirit
publicList<Requisicao>getList(){List<Requisicao>requisicoes=newArrayList<>();Stringsql="SELECT * FROM computador_requisicao";try{PreparedStatementstmt=con.prepareStatement(sql);ResultSetrs=stmt.executeQuery();while(rs.next()){Requisicaoreq=newRequisicao();Usuariouser=newUsuario();req.setId(rs.getLong("id"));user.setId(rs.getLong("idusuario"));req.setNome(rs.getString("nome"));req.setData(rs.getDate("data_requisicao"));req.setMotivo(rs.getString("Observacao"));requisicoes.add();}stmt.close();rs.close();}catch(SQLExceptionex){returnnull;}returnrequisicoes;}
tudo isso faz parte de uma lista ( pois como eu falei eu quero pegar todos os dados do banco de dados, na tabela requisições.)
Lucas_Camara
Basta adicionar a requisição na lista (List<Requisicao> requisicoes) e retornar ela.
eu não estaria adicionando o campo solicitante a lista requisicoes.add(req); pois só está adicionando o req.
Lucas_Camara1 like
Isso. Ao adicionar o usuario na requisicao, vc jah consegue acessar ele de outros lugares (pois, lembre-se, a requisicao possui um usuario)
LostSpirit
eu entendi essa parte, mas tipo desse jeito no meu tableview não iria aparecer o id do usuario
pq eu não adicionei isso a lista.
Lucas_Camara
Adicionou. O id está dentro da requisição dentro do atributo solicitante (que é um Usuario). Para pegar o id do usuario, por exemplo, vc conseguiria asism: requisicoes.get(0).getSolicitante().getId().
ai eu faria isso apenas com esse campo?
entendi
vou testar (mas nessa caso como é uma lista como ele retornaria todos os id’s? caso tenha mais de um registro)
desse modo parece que só retorna de um registro
opa man pode me tirar uma dúvida? Estava tentando de outro metodo que creio que seja mais fácil
porém estou com uma dúvida:
publicvoidinitTable()throwsSQLException{Requisicaorequisicao=newRequisicao();Usuariousuario=newUsuario();Connectioncon=ConnectionFactory.getConnection();PreparedStatementstmt=con.prepareStatement("SELECT * FROM computador_requisicao");ResultSetrs=stmt.executeQuery();while(rs.next()){requisicaolist.add(newRequisicao(rs.getLong("id"),rs.getLong("idusuario"),rs.getString("nome")));}clmid.setCellValueFactory(newPropertyValueFactory("id"));clmIdUser.setCellValueFactory(newPropertyValueFactory("id"));clmNome.setCellValueFactory(newPropertyValueFactory("nome"));clmDate.setCellValueFactory(newPropertyValueFactory("dataEntrada"));clmMotivo.setCellValueFactory(newPropertyValueFactory("motivo"));tb.setItems(requisicaolist());}while(rs.next()){requisicaolist.add(newRequisicao(rs.getLong("id"),rs.getLong("idusuario"),rs.getString("nome")));}
eu teria que criar esse construtor na classe requisicao
onde teria o id da requisição e o id do usuario?
ex:
Fazendo assim, vc terá mais problemas. Não misture as camadas.
LostSpirit
ah simm vlw
LostSpirit
ahh pensei que fosse mais fácill
mas é possível fazer isso?
fazer essa comparação nesse construtor?
Lucas_Camara1 like
Você consegue criar um construtor para receber os dois dados sem problemas.
LostSpirit
Poderia me dar um exemplo manin?
estou pensando em fazer algo com isso
mas não faço ideia de como fazer isso .
e eu tinha me esquecido desse negocio de agregração e composição
mt obrigado mesmo, não tinha passado na minha cabeça essa opção.
LostSpirit
tentei fazer algo desse tipo, mas deu altas erros mesmo importando
ele funciona porém o campo id usuario ta mostrando os id’s das requisições e não do usuario;
provavelmente por esse motivo: @FXML
private TableColumn<Requisicao, Long> clmIdUser;
ele ta pegando o get do id da requisição e não usuario
Putz, foi mal, não é Observable não, é dessa classe CellDataFeatures. Em vez de chamar o getValue, veja quais outros métodos tem disponível e que retorne a requisição.
LostSpirit
vou dar uma olhada antes disso
eu fiquei com uma dúvida man
o nome da observeble list é requisicao
public ObservableValue call(CellDataFeatures<Requisicao, Long> requisicao)
nessa parte eu botaria Long> requisicao ou Long>Requisicao