日期:2014-05-20  浏览次数:20657 次

关于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" />