Como faço para usar inner join em hibernate? Consegui fazer ate uma parte…meus arquivos:
Category
public class Category {
private int id;
private String name;
// gets e sets
}
Products
public class Products {
private int id;
private String name;
private Category category;
// gets e sets
}
Category.hbm.xml
<hibernate-mapping package="cat">
<class name="Category"
table="categories">
<id name="id" column="id_category">
<generator class="increment"/>
</id>
<property name="name" column="name_category" />
</class>
</hibernate-mapping>
Products.hbm.xml
<hibernate-mapping package="prod">
<class name="Products"
table="products">
<id name="id" column="id_product">
<generator class="increment"/>
</id>
<property name="name" column="name_product" />
</class>
</hibernate-mapping>
Surgiu uma necessidade d que um produto pode estar em mais de uma categoria, entao eu criei uma tabela products_categories que possui os atributos id_product e id_category…
Ai vem a parte que preciso de ajuda…
Como implemento isso nos meus arquivos de modo que me permita usar inner join como no exemplo:
select * from products inner join products_categories on products.id = products_categories.id_product and products_categories.id_category = 1;
Alguem pode me ajudar com isso?
Consegui fazer umas alteracoes sem dar erro ao iniciar o tomcat mas dpois quando chamo a jsp me retorna esse erro:
org.springframework.orm.hibernate3.HibernateSystemException: exception setting property value with CGLIB (set hibernate.cglib.use_reflection_optimizer=false for more info) setter of cat.Category.setProducts; nested exception is org.hibernate.PropertyAccessException: exception setting property value with CGLIB (set hibernate.cglib.use_reflection_optimizer=false for more info) setter of cat.Category.setProducts
org.springframework.orm.hibernate3.SessionFactoryUtils.convertHibernateAccessException(SessionFactoryUtils.java:661)
org.springframework.orm.hibernate3.HibernateAccessor.convertHibernateAccessException(HibernateAccessor.java:413)
org.springframework.orm.hibernate3.HibernateTemplate.execute(HibernateTemplate.java:370)
org.springframework.orm.hibernate3.HibernateTemplate.loadAll(HibernateTemplate.java:515)
cat.CategoryDAOHibernate.list(CategoryDAOHibernate.java:14)
com.derickguitar.controller.IndexController.handleRequest(IndexController.java:26)
org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter.handle(SimpleControllerHandlerAdapter.java:44)
Os arquivos que alterei:
Category.hbm.xml
<class name="Category" table="categories" lazy="true">
<id name="id" column="id_category">
<generator class="increment" />
</id>
<property name="name" column="name_category" />
<set name="products" table="products_categories" inverse="true">
<key column="id_product" />
<many-to-many class="Products" column="id_category" />
</set>
</class>
Products.hbm.xml
<class name="Products" table="products" lazy="true">
<id name="id" column="id_product">
<generator class="increment" />
</id>
<property name="name" column="name_product" />
<set name="categories" table="products_categories">
<key column="id_category" />
<many-to-many class="Category" column="id_product" />
</set>
</class>
No arquivo Category.java coloquei
private Product products;
// get e set
No arquivo Products.java coloquei
private Category categories;
// get e set
O erro está dizendo que você não tem um setProducts na classe Category (cat.Category.setProducts;)