Inner Join com Hibernate

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;)