首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > J2SE开发 >

用hibernate 可以修改 符合主键里的部分字段吗?应该怎么处理

2012-01-02 
用hibernate 可以修改 符合主键里的部分字段吗?应该怎么办?publicclassRepH201implementsjava.io.Serializ

用hibernate 可以修改 符合主键里的部分字段吗?应该怎么办?
public   class   RepH201   implements   java.io.Serializable   {        

          private   RepH201Id   id;            
         
          private   String   ftableno1;
          private   String   ftableno2;
          private   String   ftableno3;
          private   String   fbuildaddrcode;
          .
          .
          .
          (属性太多省略。。)
}
public   class   RepH201Id     implements   java.io.Serializable   {
          private   String   fmonth;
          private   String   funitcode;
          private   String   fitemname;

          ....get()     set()方法.....

          public   boolean   equals(Object   other)   {
                  if   (   (this   ==   other   )   )   return   true;
  if   (   (other   ==   null   )   )   return   false;
  if   (   !(other   instanceof   RepH201Id)   )   return   false;
  RepH201Id   castOther   =   (   RepH201Id   )   other;  
                 
  return   (   (this.getFmonth()==castOther.getFmonth())   ||   (   this.getFmonth()!=null   &&   castOther.getFmonth()!=null   &&   this.getFmonth().equals(castOther.getFmonth())   )   )
  &&   (   (this.getFunitcode()==castOther.getFunitcode())   ||   (   this.getFunitcode()!=null   &&   castOther.getFunitcode()!=null   &&   this.getFunitcode().equals(castOther.getFunitcode())   )   );
  &&   (   (this.getFitemname()==castOther.getFitemname())   ||   (   this.getFitemname()!=null   &&   castOther.getFitemname()!=null   &&   this.getFitemname().equals(castOther.getFitemname())   )   );
      }
     
      public   int   hashCode()   {
                  int   result   =   17;
                 
                  result   =   37   *   result   +   (   getFmonth()   ==   null   ?   0   :   this.getFmonth().hashCode()   );
                  result   =   37   *   result   +   (   getFunitcode()   ==   null   ?   0   :   this.getFunitcode().hashCode()   )
                  result   =   37   *   result   +   (   getFitemname()   ==   null   ?   0   :   this.getFitemname().hashCode()   );
                  return   result;


      }    

映射文件:

<hibernate-mapping>
        <class   name= "com.wedz.hibernater.dao.h201.RepH201 "   table= "REP_H201 "   schema= "dbo "   catalog= "report ">
                <composite-id   name= "id "   class= "com.wedz.hibernater.dao.h201.RepH201Id ">
                        <key-property   name= "fmonth "   type= "java.lang.String ">
                                <column   name= "fmonth "   length= "7 "   />
                        </key-property>
                        <key-property   name= "funitcode "   type= "java.lang.String ">
                                <column   name= "funitcode "   length= "9 "   />
                        </key-property>
                        <key-property   name= "fitemname "   type= "java.lang.String ">
                                <column   name= "fitemname "   length= "60 "   />
                        </key-property>
              </composite-id>
             
                        <property   name= "ftableno1 "   type= "java.lang.String ">
                                <column   name= "ftableno1 "   length= "9 "   />
                        </property>
                        <property   name= "ftableno2 "   type= "java.lang.String ">
                                <column   name= "ftableno2 "   length= "2 "   />
                        </property>
                          ......
 

我要做修改操作:

public   int   update(RepH201   h201,RepH201Id   id){
Session   session=this.beginTransaction();
RepH201Id   h201id;
RepH201   h201t;
try{
Object   obj=session.get(RepH201.class,id);
if(obj==null){
return   -1;
}
h201t=(RepH201)obj;
h201id=h201t.getId();
h201id.setFitemname(h201.getId().getFitemname());
h201t.setId(h201id);



                                                      h201t.setFtableno3(..);
                  h201t.setFtableno2(..);
                  h201t.setFtableno1(..);

                                                        ....

                                                      session.update(h201t);
this.endTransaction(true);
return   0;

}catch(HibernateException   e){
this.endTransaction(false);
e.printStackTrace();
return   -9;
}
                                                       
    }

每次如果   修改了   fitemname   就会出问题
怎么办啊?数据库我不能该  
有没有办法可以实现对主键的修改啊???



[解决办法]
主键当然不能修改啦,实在想改可以删除再插入
[解决办法]
主键数据只有在插入时候更改,更新本来就是靠主键去更新的,结果你连主键都改了,还怎么更新啊?
[解决办法]
如果是复合主键,那么就不能修改了。这样就会出现跟新错误。修改主键也可以用sql实现。你也可以建个新表试试。做个单独的测试。
[解决办法]
这不是Hibernate的问题,是数据库关于主键的基础知识,楼主怎么给忘了?呵呵

热点排行