关于hibernate 的一个小问题
<hibernate-mapping>
<class name="com.wy.dao.Shopmember" table="shopmember" schema="dbo" catalog="shopping">
<id name="name" type="java.lang.String">
<column name="name" length="50" />
<generator class="native" />
</id>
<property name="id" type="java.lang.Integer">
<column name="id" not-null="true" />
</property>
<property name="password" type="java.lang.String">
<column name="password" length="50" />
</property>
。。。。。。
上面是我一个映射文件的部分,name是主键,id不可以为空,但我在数据库中设置的为自动增加的,因此在插入数据的时候就不用set id了,可是却出现了无法插入数据的错误提示,我自己知道是因为id不可为空,但如何实现添加的时候自动增加啊??
------解决方案--------------------那就将主键设置成指派的方式:
<id name="name" type="java.lang.String">
<column name="name" length="50" />
<generator class="assigned" />
</id>
不过怎样你要自己在程序中给name赋值,并且保证唯一。
------解决方案--------------------楼主何不换一种方式去做呢!~!
你将id设为主键,并且是自动增长的,
然后把name设置成唯一的,也许这才是比较好的做法!~!
这样就很容易的解决问题了啊!~!
------解决方案--------------------ID自动增加.在<class name="id" ><generator class="sequence"></generator ></class>这是oracle的,
你的如果是mysql就是在generator标签中class="native"
这样就能,好想是这样的!!
------解决方案--------------------<generator class="sequence">
------解决方案--------------------<id name="name" type="java.lang.String">
<column name="name" length="50" />
<generator class="increment" />
</id>
只有是设置主键自动增长的
------解决方案-------------------- <id name="name" type="java.lang.String">
<column name="name" length="50" />
<generator class="native" />
</id>
老大 别冲动。。。 String 你怎么增长??? 除非你是这样 在插入一次之前
先查询上一个的值 然后再生成要插入的id 才有可能成功插入
不过中间假如有删除你就惨了。。。
比如说 1500后面本来有1501的 但是你把他删了
结果 你查询了1500 然后通过id生成器又生成了1501。。。。
------解决方案--------------------<hibernate-mapping>
<class name="com.wy.dao.Shopmember" table="shopmember" schema="dbo" catalog="shopping">
<id name="id" type="java.lang.Integer">
<column name="id" length="50" />
<generator class="sequence">
<param name="sequence">SEQ_XXXXX</param>
</generator>
</id>
<property name="name" type="java.lang.String">
<column name="name" not-null="true" />
</property>
<property name="password" type="java.lang.String">
<column name="password" length="50" />