日期:2014-05-18  浏览次数:21004 次

hibernate "中介"表映射问题.(100分~)
比如我有3个table.    
table1:
              QuestionType(id,description)
table2:
              AnserType(id,description)
table3:
              QuestionTypeAnswerType(QuestionTypeID,AnserTypeID)

这样的有关 "中介 "表关系一般是怎样映射关系的?

还有,大家在映射关系的时候,一般是在数据库中建立外键之后利用工具生成关系,还是自己手写关系,而不在数据库中建外键?

------解决方案--------------------
这是table1和table2多对多的关联映射,做关联映射的时候需要在数据库引进个公共表(table3),然后table1和table2分别与这个公共表相关联就可以了!
我们做项目的时候是手写的!

在QuestionType的值类里添加
//此问题的答案列表
private Set AnserTypeList=new HashSet();
get()和set() 方法省略

在QuestionType的值类的.hbm.xml里面加上
<set name= "AnserTypeList(QuestionType值类中的关联属性) " cascade= "save-update " table= "QuestionTypeAnswerType(关联表) " inverse= "true " lazy= "false ">
<key column= "AnserTypeID(关联表中的关联字段) "> </key>
<many-to-many class= "AnserType的值类 " column= "id "> </many-to-many>
</set>

在把AnserType的值类和其.hbm.xml中按照上面的方法添加了就可以了!
------解决方案--------------------
<set name= "QuestionTypeList " cascade= "save-update " table= "QuestionType " inverse= "true ">
<key column= "QuestionTypeID "> </key>
<many-to-one class= "QuestionType "> </many-to-one>
</set>
既然是many-to-one,何来的set ?这个改了就差不多了,就这意思
------解决方案--------------------
table3:
QuestionTypeAnswerType(QuestionTypeID,AnserTypeID)这个表是不是应该加上自己的id呀,我们做项目使用eclipse开发的,使用hibernate插件,将数据库的主键和外键关系建立好然后使用hibernate插件自己生成,只要外键关系正确很快就能建好。

------解决方案--------------------
ls的many-to-many不太好,应该是many-to-one one-to-many
------解决方案--------------------
用两个one-to-many , many-to-many 也可以,
------解决方案--------------------
找一找,实战型的资料,看看它们对多对多的表是采用 <many-to-many> 还是两个 <one-to-many>