关于hibernate xml中 many-to-one 的设置。

扁鵲東南飛 2010-07-27 02:54:35
这样的,有2个类型的model 其中A.java 是主的类别,B.java 是A的内容。

也是就是这样管理 A 里面包含的是类别,B里面是A类别的内容。
A.java (get set 方法就不写了)
         private int id;
private String diccode;
private String typename;
private String isenable;
private String remark;


B.java
         private int id ;
private String dicno;
private String dicname;
private String remark;
private DictypeInfo dictypeinfo;//A的一个对象,


现在是想B的hibernate的设置为many-to-one 但是不想设置A的主键关联,而是这是A的 “diccode”属性关联

<class name="com.zlm.domain.DiccontentInfo" table="tbl_diccontent">
<id name="id">
<generator class="native" />
</id>
<property name="dicno" type="java.lang.String"/>
<property name="dicname" type="java.lang.String"/>
<property name="remark" type="java.lang.String"/>

<many-to-one name="dictypeinfo" class="com.zlm.domain.DictypeInfo" fetch="select" property-ref="diccode">
<column name="diccode" length="20" />
</many-to-one>
</class>
这样关联,创建数据库的时候,出现错误。不知如何解决,希望各位指点迷津。。。谢谢了。
...全文
246 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
扁鵲東南飛 2010-07-28
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 yys79 的回复:]
不太明白,B表diccode与A表diccode关联,本来就是普通的多对一。关联关系也不是必须是成对的
[/Quote]
也是,关联关系也不是必须是成对的。
问题解决了。和大家分享下:
B里面的 many-to-one可以这样写:
B.xml
<many-to-one name="dictypeinfo" class="com.zlm.domain.DictypeInfo" property-ref="diccode">
<column name="diccode"/>
</many-to-one>

但是对应的A.xml里面也得有一个对应的关系,就是A的diccode 必须是唯一的。
<property name="diccode"  type="java.lang.String" unique="true" />


这样才能用程序自动生成表,而且不出问题。否则的话,就会出现关联不成功问题。
loveunittesting 2010-07-27
  • 打赏
  • 举报
回复
不太明白,B表diccode与A表diccode关联,本来就是普通的多对一。关联关系也不是必须是成对的
扁鵲東南飛 2010-07-27
  • 打赏
  • 举报
回复
我只需要B来关联A,不需要管A。也就是A是B的上级,A里面没有B的任何信息,当然A的diccode 要在B里出现关联,也是唯一的一个和B联系的地方。
loveunittesting 2010-07-27
  • 打赏
  • 举报
回复
如过b不是与A的主键关联,可以使用many-to-one里面property-ref属性来指定关联的字段
madFatso 2010-07-27
  • 打赏
  • 举报
回复
set 元素:
name:映射类属性的名称;

access:hibernate访问这个属性的策略

table:关联的目标数据库表

schema:目标数据库表的schema名字

catalog:目标数据库表的catalog名字

lazy:是否采用延迟加载

subselect:定义一个子查询

inverse:用于标识双相关联中被动的一方,一般标识一对多中一的一方设置为ture

sort;设置排序的类型,这个属性可以选择的值有:unsorted,不排序;natural.自然排序,也就是利用 java对象来进行排序;comparatorClass,指定某个实现了java.util.Comparator接口的类作为排序算法,注意,这里的排序要避免有order-by同时使用

mutable:标识被关联的对象是否可以改变

cascode;设置操作中的级联策略,这个属性可以选择的值有:all,在所有的操作的情况下均进行级联,none,在所有操作的情况下均不进行级联操作,save-update,在执行更新操作时级联,delete,在执行删除操作时级联,all-delete-orphan,当被关联对象失去关联宿主时,将被删除

order-by:设置排序规则

where;增加筛选条件,这里设置的条件将被加载到所有的sql查询语句中

batch-size:采用延迟加载时,一次读取数据的数量

fetch:设置抓取数据的策略,这个属性的可选值有join外连接抓取,select序列选择抓取
madFatso 2010-07-27
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 zhangliangming_87 的回复:]
不会是没有能解决的方法吧?我都试了很多了。还是不成功啊。
[/Quote]

你把A类里加上set<b>
b类加上diccode
A.hbm.xml加上set元素
b去掉many-to-one
搜下hibernate 非主键关联
扁鵲東南飛 2010-07-27
  • 打赏
  • 举报
回复
不会是没有能解决的方法吧?我都试了很多了。还是不成功啊。
扁鵲東南飛 2010-07-27
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 madfatso 的回复:]
可以
a.hbm.xml
<set
<key>
<column name="diccode" length="20"/>
</key>
<one-to-many clas……
[/Quote]

好像少写了些东西吧?<set 后面的熟悉如写啊?代表什么意思啊?

谢谢。。。。
madFatso 2010-07-27
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 zhangliangming_87 的回复:]
引用 1 楼 madfatso 的回复:
只能设置A的主键关联


不能用非主键关联么?????????
[/Quote]
可以
a.hbm.xml
<set
<key>
<column name="diccode" length="20"/>
</key>
<one-to-many class="b" />
</set>
扁鵲東南飛 2010-07-27
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 madfatso 的回复:]
只能设置A的主键关联
[/Quote]

不能用非主键关联么?????????
madFatso 2010-07-27
  • 打赏
  • 举报
回复
只能设置A的主键关联

81,094

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧