Dúvidas em relacionamentos hibernate

Olá pessoal, alguém poderia me tirar algumas dúvidas com relação ao hibernate?
Bom tenho 2 tabelas produtos e vendas com um relacionamento n:n que gerou uma tabela item_venda

eu fiz isso nos meus dois modelos para mapear:

Classe Produtos:

@Entity(name="Produtos")
@Table(name = "produtos")
public class Produtos {
    @Id
    @GeneratedValue
	private Long codProduto;
	@Column(name="preco_Venda")
	private Double preco_Venda;
	@Column(name="nome")
	private String nome;	
}

a classe
Venda:

@Entity(name="Venda")
@Table(name = "venda")
public class Venda {
    @Id
    @GeneratedValue
	private Long codVenda;
	@Column(name="data_venda")
	private Date dataVenda;
    @OneToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "idCaixa")
	private Caixa caixa;
	@ManyToOne(cascade = CascadeType.ALL) 
	@JoinColumn(name="produtos_idVenda", referencedColumnName="idVenda",nullable=false)
	private List<Lista_Produtos> listaProdutos;
}

bom eu não preciso ter essa minha tabela item_venda como uma classe

uma das minhas dúvidas é, com esse mapeamento o que eu precisaria para inserir um valor nessa tabela item_venda.

Outra dúvida é em relação a minha classe Produtos:

Eu precisaria por uma composição de Venda? ex:

private Venda venda;

//

ou eu precisaria criar + uma classe item_Venda

// para ilustrar meu relacionamento no banco de dados:

Segundo seu modelo de dados precisa, senão como você vai acessar o preço da venda?

Quem diz o que é preciso são os requisitos. Se não tiver a necessidade, então não precisa.

1 curtida

entendi, então preciso criar essa tabela e mapear ela.
Bom com isso eu tenho mais uma dúvida em relação ao hibernate para eu inserir um dado em uma tabela ela necessáriamente tem que ter uma classe e está mapeada?
Existe algum modo de inserir ou selecionar valores de uma tabela que não seja uma classe e não esteja mapeada?

Existe, pesquise por native query com jpa. Mas usar o overhead do jpa/hibernate pra trabalhar dessa forma não vale o custo. É mais leve e prático usar JDBC puro ou JDBC Template.

1 curtida

**[quote=“javaflex, post:4, topic:390559, full:true”]

Existe, pesquise por native query com jpa. Mas usar o overhead do jpa/hibernate pra trabalhar dessa forma não vale o custo. É mais leve e prático usar JDBC puro ou JDBC Template.
[/quote]

acabei procurando sobre o spring bot achei muito interessante vou começar a estudar sobre, e em uma video aula no yt acabei vendo um cara falando sobre um webservice etc etc
o spring possibilita isso ?
o que eu devo procurar pra saber mais sobre isso?
acabei instalando o spring tools 4

vlw pela atenção manin!

Possibilita. Sobre o que procurar depende do requisito que vai atender de fato.

1 curtida

opa vlw mano, no gettin started eu acabei encontrando o CrudRepository do spring
vale apena utilizar-lo ou é melhor criar um DAO generico com o spring?

Vale usar sim, pode usar ele com JDBC Template (mais leve e flexível) ou spring data jpa (mais pesado e amarrado).

vlw mano, nesse caso eu nem preciso utilizar o @entity nos modelos pois se eu utilizar eu vou precisar mapar não é?

No RowMapper você tem a liberdade de acessar diretamente o que vem jdbc ou mapear pra onde quiser.

Exemplo sem rowmapper:

Exemplo com:

https://www.mkyong.com/spring/spring-jdbctemplate-querying-examples/

@Override
public boolean validar(String login, String password) {     

    Map<String, Object> map = jdbcTemplate.queryForMap(queryPorLogin, login);
       map.getClass("senha");
    if() {
        return true;
    }else {
    return false;
    }
}

eu tenho esse metodo utilizando creio eu que seja um rowmapper não é?
Eu olhei esses exemplos e não imagino como aplicaria o resulset nessa primeiro eu criaria um autowire do resultset nessa minha classe e passava como parametro? (teria como melhorar esse meu metodo? eu tou pegando só um registro e utilizando o map)

Neste caso não precisa de rowmapper, dá uma pesquisada sobre queryForObject. Exemplo sem testar só pra ilustrar aproximadamente como seria:

return !jdbcTemplate.queryForObject("select count(1) from usuario where login = ? and senha = ?", new Object[] { login, senha }, Integer.class).equals(0);
1 curtida

entendi mano eu fiz algo parecido com :

  return !jdbcTemplate.queryForObject("select * from usuarios where login = ?", 
  		new Object[] { login }, Usuarios.class).equals(0);

mas caso não tenha nenhum resultado retornar um joptionpane com o error:

existe como eu tratar?
Ex: se não houver um usuario mostrar uma outra msg no lugar dessa?

Faz o select igual te passei no exemplo.