问题描述
现问题如下:学生表sid(主键);sname;老师表tid(主键);tname;在老师类中privateSet<Student>students;//对象组合在老师的hbm.xml配置文件中配置<setname="students"table="STUDENT"><key><columnname="SID"/></key><one-to-manyclass="com.icar.entities.Student"/></set>第一次运行后会在服务器中自动生成两张表,在teacher表中多加了一列SID(外键)(但是在老师类中是没有这个属性的,只是数据库中通过映射配置的外键关联自动生成的一列)那么若现在我有老师的tid号想查找他的所有学生。该怎样写HQL语句或者用什么方法可以达到效果呢?
解决方案
解决方案二:
建议你反向生成,先创建数据库,然后生成实体或者先创建实体跟配置文件,然后生成数据库(实体中自己配置属性)
解决方案三:
按照你的配置,应该是student表中存在外键列SID引用teacher表的主键吧。
解决方案四:
hql:selectt.studentsfromTeachertwheret.id=tid;
解决方案五:
看法跟2楼一致
解决方案六:
引用1楼shijing266的回复:
建议你反向生成,先创建数据库,然后生成实体或者先创建实体跟配置文件,然后生成数据库(实体中自己配置属性)
反向生成有什么区别么?现在我数据库里的Strudent表示sid(主键),sname,老师表是tid(主键),tname,sid。但是我的老师实体类中没有sid这个属性啊,我Hql查询语句传了一个含sid的student对象过来。该怎么查?
解决方案七:
引用3楼u013972119的回复:
hql:selectt.studentsfromTeachertwheret.id=tid;
不是说HQL查询语句中没有select的么?
解决方案八:
引用2楼u013972119的回复:
按照你的配置,应该是student表中存在外键列SID引用teacher表的主键吧。
正好相反是student的sid列是主键被teacher表引为外键所以teacher表中多了一个列sid
解决方案九:
引用5楼LavenderDestiny的回复:
Quote: 引用1楼shijing266的回复:
建议你反向生成,先创建数据库,然后生成实体或者先创建实体跟配置文件,然后生成数据库(实体中自己配置属性)反向生成有什么区别么?现在我数据库里的Strudent表示sid(主键),sname,老师表是tid(主键),tname,sid。但是我的老师实体类中没有sid这个属性啊,我Hql查询语句传了一个含sid的student对象过来。该怎么查?
区别在于实现方式不同,但是结果都是一样的,你到时候老师类里面会有学生对象,这个不用我说吧还有,你们用过hibernate反向生成么?或者用javaBean小工具也行
解决方案十:
引用7楼LavenderDestiny的回复:
Quote: 引用2楼u013972119的回复:
按照你的配置,应该是student表中存在外键列SID引用teacher表的主键吧。正好相反是student的sid列是主键被teacher表引为外键所以teacher表中多了一个列sid
你确定?
解决方案十一:
引用8楼shijing266的回复:
Quote: 引用5楼LavenderDestiny的回复:
Quote: 引用1楼shijing266的回复:
建议你反向生成,先创建数据库,然后生成实体或者先创建实体跟配置文件,然后生成数据库(实体中自己配置属性)反向生成有什么区别么?现在我数据库里的Strudent表示sid(主键),sname,老师表是tid(主键),tname,sid。但是我的老师实体类中没有sid这个属性啊,我Hql查询语句传了一个含sid的student对象过来。该怎么查?
区别在于实现方式不同,但是结果都是一样的,你到时候老师类里面会有学生对象,这个不用我说吧还有,你们用过hibernate反向生成么?或者用javaBean小工具也行
没有用过诶,难道这种方式生成的就不能查询吗?
解决方案十二:
引用9楼u013972119的回复:
Quote: 引用7楼LavenderDestiny的回复:
Quote: 引用2楼u013972119的回复:
按照你的配置,应该是student表中存在外键列SID引用teacher表的主键吧。正好相反是student的sid列是主键被teacher表引为外键所以teacher表中多了一个列sid
你确定?
好吧,我搞反了是tid的主键给了student做外键。现在问题是我有存有tid的teacher对象,要查他的学生,该怎么查啊?
解决方案十三:
引用8楼shijing266的回复:
Quote: 引用5楼LavenderDestiny的回复:
Quote: 引用1楼shijing266的回复:
建议你反向生成,先创建数据库,然后生成实体或者先创建实体跟配置文件,然后生成数据库(实体中自己配置属性)反向生成有什么区别么?现在我数据库里的Strudent表示sid(主键),sname,老师表是tid(主键),tname,sid。但是我的老师实体类中没有sid这个属性啊,我Hql查询语句传了一个含sid的student对象过来。该怎么查?
区别在于实现方式不同,但是结果都是一样的,你到时候老师类里面会有学生对象,这个不用我说吧还有,你们用过hibernate反向生成么?或者用javaBean小工具也行
这个和正反向生成应该没什么关系的,我只是要用HQL语句根据teacher的tid去查询他的学生而已。
解决方案十四:
HQL关系对象查询,利用实体对象来查询sql表,你现在的结果是单纯的Teacher类、单纯的Student类,两者没关系怎么查~
解决方案十五:
引用13楼shijing266的回复:
HQL关系对象查询,利用实体对象来查询sql表,你现在的结果是单纯的Teacher类、单纯的Student类,两者没关系怎么查~
有啊<setname="students"table="STUDENT"><key><columnname="TID"/></key><one-to-manyclass="com.icar.entities.Student"/></set>有一对多映射,在运行之后,会在数据库的student表自动生成一列tid,问题是我的实体类里没有这一属性,那么我要是想用hql查询语句就不知道用什么条件判断了