java hibernate 无主键表 更新
遇到这样的问题,用hibernate开发,myeclipse反向生成映射文件,现有表eventAlert,此表是个没有主键的表,生成的映射文件,如下:<hibernate...
遇到这样的问题,用hibernate 开发,myeclipse 反向生成映射文件,现有表eventAlert,此表是个没有主键的表,生成的映射文件,如下:
<hibernate-mapping>
<class name="com.tomsync.vo.EventAlert" table="EventAlert" catalog="obm">
<composite-id name="id" class="com.tomsync.vo.EventAlertId">
<key-property name="eventalertTimeupdate" type="java.util.Date">
<column name="eventalert_timeupdate" length="19" />
</key-property>
<key-property name="eventalertTimecreate" type="java.util.Date">
<column name="eventalert_timecreate" length="19" />
</key-property>
<key-many-to-one name="userObm" class="com.tomsync.vo.UserObm">
<column name="eventalert_userupdate" />
</key-many-to-one>
<key-many-to-one name="userObm_1" class="com.tomsync.vo.UserObm">
<column name="eventalert_usercreate" />
</key-many-to-one>
<key-many-to-one name="event" class="com.tomsync.vo.Event">
<column name="eventalert_event_id" />
</key-many-to-one>
<key-many-to-one name="userObm_2" class="com.tomsync.vo.UserObm">
<column name="eventalert_user_id" />
</key-many-to-one>
<key-property name="eventalertDuration" type="java.lang.Integer">
<column name="eventalert_duration" />
</key-property>
</composite-id>
<many-to-one name="userObmByEventalertUserupdate" class="com.tomsync.vo.UserObm" update="false" insert="false" fetch="select">
<column name="eventalert_userupdate" />
</many-to-one>
<many-to-one name="userObmByEventalertUserId" class="com.tomsync.vo.UserObm" update="false" insert="false" fetch="select">
<column name="eventalert_user_id" />
</many-to-one>
<many-to-one name="event" class="com.tomsync.vo.Event" update="false" insert="false" fetch="select">
<column name="eventalert_event_id" />
</many-to-one>
<many-to-one name="userObmByEventalertUsercreate" class="com.tomsync.vo.UserObm" update="false" insert="false" fetch="select">
<column name="eventalert_usercreate" />
</many-to-one>
</class>
</hibernate-mapping>
如上,虚拟出类 com.tomsync.vo.EventAlertId 作为它的主键,在项目中,读取,没有问题,当我要对 com.tomsync.vo.EventAlertId 类中的 eventalertDuration 做更新的时候,不抱异常,项目运行一切正常,但是,库中的数据就是没有改过来。还是新建时候的数据。
请问,对于虚拟出来的主键 com.tomsync.vo.EventAlertId 类中的属性 eventalertDuration 是不是不可修改?
四楼所说的解决方案只是查询取值的时候,但是怎么更新 复合主键?谁解决该问题,定加分100 展开
<hibernate-mapping>
<class name="com.tomsync.vo.EventAlert" table="EventAlert" catalog="obm">
<composite-id name="id" class="com.tomsync.vo.EventAlertId">
<key-property name="eventalertTimeupdate" type="java.util.Date">
<column name="eventalert_timeupdate" length="19" />
</key-property>
<key-property name="eventalertTimecreate" type="java.util.Date">
<column name="eventalert_timecreate" length="19" />
</key-property>
<key-many-to-one name="userObm" class="com.tomsync.vo.UserObm">
<column name="eventalert_userupdate" />
</key-many-to-one>
<key-many-to-one name="userObm_1" class="com.tomsync.vo.UserObm">
<column name="eventalert_usercreate" />
</key-many-to-one>
<key-many-to-one name="event" class="com.tomsync.vo.Event">
<column name="eventalert_event_id" />
</key-many-to-one>
<key-many-to-one name="userObm_2" class="com.tomsync.vo.UserObm">
<column name="eventalert_user_id" />
</key-many-to-one>
<key-property name="eventalertDuration" type="java.lang.Integer">
<column name="eventalert_duration" />
</key-property>
</composite-id>
<many-to-one name="userObmByEventalertUserupdate" class="com.tomsync.vo.UserObm" update="false" insert="false" fetch="select">
<column name="eventalert_userupdate" />
</many-to-one>
<many-to-one name="userObmByEventalertUserId" class="com.tomsync.vo.UserObm" update="false" insert="false" fetch="select">
<column name="eventalert_user_id" />
</many-to-one>
<many-to-one name="event" class="com.tomsync.vo.Event" update="false" insert="false" fetch="select">
<column name="eventalert_event_id" />
</many-to-one>
<many-to-one name="userObmByEventalertUsercreate" class="com.tomsync.vo.UserObm" update="false" insert="false" fetch="select">
<column name="eventalert_usercreate" />
</many-to-one>
</class>
</hibernate-mapping>
如上,虚拟出类 com.tomsync.vo.EventAlertId 作为它的主键,在项目中,读取,没有问题,当我要对 com.tomsync.vo.EventAlertId 类中的 eventalertDuration 做更新的时候,不抱异常,项目运行一切正常,但是,库中的数据就是没有改过来。还是新建时候的数据。
请问,对于虚拟出来的主键 com.tomsync.vo.EventAlertId 类中的属性 eventalertDuration 是不是不可修改?
四楼所说的解决方案只是查询取值的时候,但是怎么更新 复合主键?谁解决该问题,定加分100 展开
展开全部
用composite primary keys
http://docs.jboss.org/hibernate/stable/annotations/reference/en/html_single/#d0e2177
@Entity
public class Parent implements Serializable {
@Id
public ParentPk id;
...
}
@Embeddable
public class ParentPk implements Serializable {
String firstName;
String lastName;
...
}
http://docs.jboss.org/hibernate/stable/annotations/reference/en/html_single/#d0e2177
@Entity
public class Parent implements Serializable {
@Id
public ParentPk id;
...
}
@Embeddable
public class ParentPk implements Serializable {
String firstName;
String lastName;
...
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
从没接触过无主键表操作。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
可以无主键的,无主键就是所有的列联合成为一个主键,映射后会多出一个Java文件是表名id.java文件,意思是封装过了的表存入id那个类中
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
用hibernate开发要注意数据库中的每张表都应该有一个主键的。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询