`

hibernate关联双向多对一的join查询问题

 
阅读更多
这是从别人那引用过来的代码,仅供参考:
1.如果没有在Hibernate配置里做关联,在Hql里面是不能用join的。
2.Hql里面的join是没有"ON" 子句的。
3.如果是inner join,Join的依据就是事先设计好关联
4.如果要用left join或right join,那么要采用referece的方式来写这个语句
比如:FROM a LEFT JOIN a.b(这里一定要写成 "a.b")
5.有fetch的时候每条记录只有一个Object,那就是FROM那个表,所有其他表的数据都要通过referece来

获取,没有fetch的时候返回的是一个Object[],每个表都是一个对象。
(right join 不能用 fetch) 。比如:FROM a LEFT JOIN FETCH a.b
 

 Computer表:

public class Computer implements Serializable{
	private Long id;
	private String name;
	
	private Set usbs = new HashSet();

	public Long getId() {
		return id;
	}
	public void setId(Long id) {
		this.id = id;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public Set getUsbs() {
		return usbs;
	}
	public void setUsbs(Set usbs) {
		this.usbs = usbs;
	}
}

 Usb表:

public class Usb implements Serializable{
	private Long id;
	private String maker;//厂家
	private Computer computer;
	public Computer getComputer() {
		return computer;
	}
	public void setComputer(Computer computer) {
		this.computer = computer;
	}
	public Long getId() {
		return id;
	}
	public void setId(Long id) {
		this.id = id;
	}
	public String getMaker() {
		return maker;
	}
	public void setMaker(String maker) {
		this.maker = maker;
	}
}

 Computer.hbm.xml文件:

<hibernate-mapping default-cascade="none">
    <class name="com.model.Computer" table="RD_COMPUTER" dynamic-insert="false" dynamic-update="false">
        <id name="id" type="java.lang.Long" unsaved-value="null">
            <column name="ID" sql-type="NUMBER(19)"/>
            <generator class="sequence">
                <param name="sequence">RD_COMPUTER_SEQ</param>
            </generator>
        </id>
        <property name="name" type="java.lang.String">
            <column name="t_name" not-null="true" unique="false" sql-type="VARCHAR2(255)"/>
        </property>
         <set name="usbs" inverse="true" lazy="true" cascade="all-delete-orphan">
			<key>
	            <column name="COMPUTER_FK" scale="0" not-null="true" />
	        </key>
	        <one-to-many class="com.model.Usb" />
		</set>
    </class>
</hibernate-mapping>

 Usb.hbm.xml:

<hibernate-mapping default-cascade="none">
    <class name="com.model.Usb" table="RD_USB" dynamic-insert="false" dynamic-update="false">
        <id name="id" type="java.lang.Long" unsaved-value="null">
            <column name="ID" sql-type="NUMBER(19)"/>
            <generator class="sequence">
                <param name="sequence">RD_USB_SEQ</param>
            </generator>
        </id>
        <property name="maker" type="java.lang.String">
            <column name="t_maker" not-null="true" unique="false" sql-type="VARCHAR2(255)"/>
        </property>
         <many-to-one name="computer" class="com.model.Computer" foreign-key="RD_USB_RD_COMPUTER_FKC" lazy="proxy" fetch="select">
            <column name="COMPUTER_FK" not-null="false" sql-type="NUMBER(19)"/>
        </many-to-one>
    </class>
</hibernate-mapping>

 查询语句:

	public void findByAll(){
		String hql = "select u from Usb u join u.computer c";
		
		Session sf =HibernateSessionFactory.getSession();
		
		Query q = sf.createQuery(hql);
		
		List list = q.list();
		
		if(null != list && list.size()>0){
			
			for(int i=0;i<list.size();i++){
				Usb u = (Usb)list.get(i);
				System.out.println(u.getMaker());
			}
		}
	}

 "select u from Usb u join u.computer c“语句中:

     1.只能使用u.compute,而不能直接使用 Computer进行关联,(select u from Usb u join Computer c:这种写法是错误的)

    2.语句中不能出现on

    3.inner是被省略掉了,可以写成inner join!

分享到:
评论

相关推荐

    hibernate多对多双向关联

    该描述提供了一个博客链接,虽然没有直接给出具体内容,但我们可以假设博客内容会详细解释如何在Hibernate中设置和管理多对多双向关联。这通常包括配置实体类、定义关联映射、使用中间表以及进行增删改查操作。在...

    Hibernate ORM - 多对多双向连接表关联关系

    本文将深入探讨Hibernate ORM中的一个关键概念——多对多双向连接表关联关系。这种关联关系在实际业务场景中非常常见,比如用户与角色、课程与学生等例子,都需要用到多对多的关系来描述它们之间的复杂联系。 首先...

    hibernate外键实现一对一双向关联关系源码

    一对一双向关联虽然方便,但可能导致额外的JOIN操作,影响查询性能。在大型系统中,可能需要权衡易用性和性能,考虑是否真的需要双向关联。 总结起来,Hibernate中的一对一双向关联关系是通过`@OneToOne`注解、`...

    hibernate双向多对多关联映射(注解版)

    在这个“hibernate双向多对多关联映射(注解版)”的主题中,我们将深入探讨如何使用Hibernate的注解配置来处理数据库中的双向多对多关联关系。 首先,多对多关联在数据库设计中是指两个实体之间存在多个对应关系,...

    Hibernate ORM - 一对多双向连接表关联关系

    “Hibernate ORM - 一对多双向连接表关联关系”这个标题指出我们要讨论的是Hibernate ORM框架中的一种特定数据库关联模型,即一对多的双向关联。在Hibernate中,ORM(对象关系映射)是一种技术,它允许我们用面向...

    hibernate 双向多对多关联映射练习

    4. **查询优化**:由于双向多对多关联可能导致N+1查询问题,所以在进行关联查询时,应考虑使用`@Fetch(FetchMode.JOIN)`或`@BatchSize`来优化性能。 5. **级联操作**:通过`cascade`属性可以设置级联操作,比如`...

    Hibernate一对多(多对一)双向关联(annotation/xml)

    总之,理解和熟练运用Hibernate的一对多、多对一以及双向关联,是提升Java企业级应用开发效率的关键。通过注解或XML配置,开发者可以灵活地定义实体间的关联,实现数据的持久化。同时,注意级联操作、懒加载策略等...

    hibernate关联关系多对一实例

    6. **查询优化**:在处理多对一关联时,我们需要关注HQL(Hibernate Query Language)或JPA的Criteria API,以及JOIN fetch,以避免过多的数据库查询。例如,通过`join fetch`可以一次性获取学生和其关联的教师信息...

    hibernate双向多对多关联映射(XML)

    本知识点将深入探讨Hibernate中的双向多对多关联映射,并通过XML配置文件进行设置。 在关系型数据库中,多对多(Many-to-Many)关系是两个表之间的一种复杂关联,表示一个实体可以与多个其他实体相关联,反之亦然。...

    hibernate一对多关联映射(双向关联)

    在Hibernate的一对多关联中,双向关联意味着双方都可以通过导航属性访问对方。例如,用户类(User)可以有一个订单集合(Orders),而订单类(Order)同样有一个用户属性(User)。这样设计的好处在于,我们可以在任一侧轻松...

    hibernate多对多关联映射(单项关联)

    在Java的持久化框架Hibernate中,多对多关联映射是一种常见的关系模型,它用于处理两个实体类之间存在多个对应关系的情况。这篇博客"hibernate多对多关联映射(单项关联)"深入探讨了如何在Hibernate中实现这种映射...

    hibernate多对一关联关系

    在Java的持久化框架Hibernate中,"多对一"关联关系是一种常见的对象关系映射(ORM)设计,它表示一个实体(子项)可以与多个其他实体(父项)相关联,而每个父项可能被多个子项引用。在数据库层面,这通常对应于一个...

    Hibernate关联关系练习【全】

    在数据库设计中,关联通常指的是表与表之间的连接,例如一对一、一对多、多对一和多对多关系。在Hibernate中,这些关联可以通过配置映射文件或者使用注解来实现。 一对一(OneToOne)关联是当两个实体之间存在唯一...

    Hibernate关于注解的一对多,多对多,一对一

    2. **@JoinTable**:多对多关系通常需要一个中间表来存储双方的关联,`@JoinTable`用来定义这个中间表,包括它的名字、连接的列名等。 ```java @Entity public class User { @ManyToMany @JoinTable(name = "user...

    hibernate一对多与多对一

    总结来说,Hibernate的一对多和多对一关联是数据库实体间关系映射的关键部分,它们提供了强大的工具来处理复杂的数据库交互。多对多关系和双向关联进一步扩展了这一功能,让数据管理更加灵活。在实际开发中,根据...

    hibernate中的 一对一唯一外键双向关联

    在Java的持久化框架...总之,一对一唯一外键双向关联在Hibernate中提供了强大的对象关系映射能力,但需要谨慎处理,以防止潜在的问题。理解并正确配置这种关联关系对于提升Java应用程序的持久化层设计至关重要。

    Hibernate教程14_关系映射之多对多双向关联

    本教程将重点讲解如何在Hibernate中实现多对多双向关联,这是数据库设计中常见的一种关系类型,它允许一个实体实例与多个其他实体实例相互关联。 在数据库设计中,多对多关系意味着一个表的记录可以与另一个表的多...

    hibernate实例(一对多,多对一)

    在这个“hibernate实例(一对多,多对一)”的主题中,我们将深入探讨两种重要的关联关系:一对一(One-to-One)和一对多(One-to-Many)。 **一对一关联(One-to-One)** 在一对一关联中,一个实体与另一个实体之间...

    Hibernate 多对多关联

    在Java的持久化框架Hibernate中,多对多(Many-to-Many)关联是一种常见的数据库关系映射,它允许一个实体类中的多个实例与另一个实体类的多个实例相互关联。在这个场景下,"Hibernate 多对多关联"的问题可能是由于...

    JPA中的一对一双向关联

    理解JPA中一对一双向关联的实现,你可以查看Hibernate(一个流行的JPA实现)的源码,学习其内部如何处理关联的建立和维护。同时,使用诸如IntelliJ IDEA这样的集成开发环境(IDE),其内置的代码生成器可以帮助你...

Global site tag (gtag.js) - Google Analytics