`

Hibernate映射无主键表的问题

阅读更多
在ms sql server 数据库中,有一个表Authors(注:此表没有主键列),用MyEclipse的hibernate生成的映射中出现四个文件,AbstractAuthors.java,Authors.java,AuthorsId.java,Authors.hbm.xml


表中有一个列是AuthName,但这列不是主键,因为AuthName可以重复,没有自增列.

现在的问题是我应该怎么做才能把数据库的数据取出来?


回复:Struts+Hibernate映射无主键表的问题

只要你不根据主键id取单条记录
其他都是一样的
取出符合条件的list即可

回复:Struts+Hibernate映射无主键表的问题

但取出 list 之后也要类型转换啊!因为他生成了两个java文件,我不知道怎么处理了!

请指教~~~~

回复:Struts+Hibernate映射无主键表的问题

AbstractAuthors.java 
AuthorsId.java
不管它,你取出list集合用Authors.java转换
如果model里有AuthorsId的话就把它去掉.xml文件里也一样,保留里边的属性就可以了.

不过很奇怪,为什么你要这么做,没有主键的表,至少也要是个复合主键啊

回复:Struts+Hibernate映射无主键表的问题

这是映射文件

xml 代码
  1. <!---->xml version="1.0"?>  
  2. <!---->
  3. "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">  
  4. <!---->  
  5. <hibernate-mapping>  
  6.     <class name="com.lichen.infocenter.hibernate.mapping.Wzcxtemp" table="WZCXTEMP" schema="EDDIE">  
  7.         <composite-id name="id" class="com.lichen.infocenter.hibernate.mapping.WzcxtempId">  
  8.             <key-property name="ch" type="java.lang.String">  
  9.                 <column name="CH" length="20" />  
  10.             key-property>  
  11.             <key-property name="cx" type="java.lang.String">  
  12.                 <column name="CX" length="16" />  
  13.             key-property>  
  14.             <key-property name="cz" type="java.lang.String">  
  15.                 <column name="CZ" length="80" />  
  16.             key-property>  
  17.             <key-property name="wzdate" type="java.lang.String">  
  18.                 <column name="WZDATE" length="20" />  
  19.             key-property>  
  20.             <key-property name="wzdd" type="java.lang.String">  
  21.                 <column name="WZDD" length="80" />  
  22.             key-property>  
  23.             <key-property name="wzxw" type="java.lang.String">  
  24.                 <column name="WZXW" length="80" />  
  25.             key-property>  
  26.             <key-property name="wzsxh" type="java.lang.String">  
  27.                 <column name="WZSXH" length="20" />  
  28.             key-property>  
  29.             <key-property name="cldw" type="java.lang.String">  
  30.                 <column name="CLDW" length="80" />  
  31.             key-property>  
  32.             <key-property name="pzdm" type="java.lang.String">  
  33.                 <column name="PZDM" length="40" />  
  34.             key-property>  
  35.             <key-property name="wzcldz" type="java.lang.String">  
  36.                 <column name="WZCLDZ" length="80" />  
  37.             key-property>  
  38.             <key-property name="lxdh" type="java.lang.String">  
  39.                 <column name="LXDH" length="20" />  
  40.             key-property>  
  41.             <key-property name="flag" type="java.lang.String">  
  42.                 <column name="FLAG" length="2" />  
  43.             key-property>  
  44.         composite-id>  
  45.     class>  
  46. hibernate-mapping>  



回复:Struts+Hibernate映射无主键表的问题

这是 Wzcxtemp 类::

package com.lichen.infocenter.hibernate.mapping;
// Generated by MyEclipse - Hibernate Tools



/**
 * Wzcxtemp generated by MyEclipse - Hibernate Tools
 */
public class Wzcxtemp extends AbstractWzcxtemp implements java.io.Serializable {

    // Constructors

    /** default constructor */
    public Wzcxtemp() {
    }

    
    /** full constructor */
    public Wzcxtemp(WzcxtempId id) {
        super(id);        
    }
   
}

这是 WzcxtempId 类::
package com.lichen.infocenter.hibernate.mapping;

/**
 * WzcxtempId generated by MyEclipse - Hibernate Tools
 */

public class WzcxtempId  implements java.io.Serializable {


    // Fields    

     private String ch;
     private String cx;
     private String cz;
     private String wzdate;
     private String wzdd;
     private String wzxw;
     private String wzsxh;
     private String cldw;
     private String pzdm;
     private String wzcldz;
     private String lxdh;
     private String flag;


    // Constructors

    /** default constructor */
    public WzcxtempId() {
    }

    

   
    // Property accessors

    public String getCh() {
        return this.ch;
    }
    
    public void setCh(String ch) {
        this.ch = ch;
    }

    public String getCx() {
        return this.cx;
    }
    
    public void setCx(String cx) {
        this.cx = cx;
    }

    public String getCz() {
        return this.cz;
    }
    
    public void setCz(String cz) {
        this.cz = cz;
    }

    public String getWzdate() {
        return this.wzdate;
    }
    
    public void setWzdate(String wzdate) {
        this.wzdate = wzdate;
    }

    public String getWzdd() {
        return this.wzdd;
    }
    
    public void setWzdd(String wzdd) {
        this.wzdd = wzdd;
    }

    public String getWzxw() {
        return this.wzxw;
    }
    
    public void setWzxw(String wzxw) {
        this.wzxw = wzxw;
    }

    public String getWzsxh() {
        return this.wzsxh;
    }
    
    public void setWzsxh(String wzsxh) {
        this.wzsxh = wzsxh;
    }

    public String getCldw() {
        return this.cldw;
    }
    
    public void setCldw(String cldw) {
        this.cldw = cldw;
    }

    public String getPzdm() {
        return this.pzdm;
    }
    
    public void setPzdm(String pzdm) {
        this.pzdm = pzdm;
    }

    public String getWzcldz() {
        return this.wzcldz;
    }
    
    public void setWzcldz(String wzcldz) {
        this.wzcldz = wzcldz;
    }

    public String getLxdh() {
        return this.lxdh;
    }
    
    public void setLxdh(String lxdh) {
        this.lxdh = lxdh;
    }

    public String getFlag() {
        return this.flag;
    }
    
    public void setFlag(String flag) {
        this.flag = flag;
    }
   



   public boolean equals(Object other) {
         if ( (this == other ) ) return true;
 if ( (other == null ) ) return false;
 if ( !(other instanceof WzcxtempId) ) return false;
 WzcxtempId castOther = ( WzcxtempId ) other; 
         
 return ( (this.getCh()==castOther.getCh()) || ( this.getCh()!=null && castOther.getCh()!=null && this.getCh().equals(castOther.getCh()) ) )
 && ( (this.getCx()==castOther.getCx()) || ( this.getCx()!=null && castOther.getCx()!=null && this.getCx().equals(castOther.getCx()) ) )
 && ( (this.getCz()==castOther.getCz()) || ( this.getCz()!=null && castOther.getCz()!=null && this.getCz().equals(castOther.getCz()) ) )
 && ( (this.getWzdate()==castOther.getWzdate()) || ( this.getWzdate()!=null && castOther.getWzdate()!=null && this.getWzdate().equals(castOther.getWzdate()) ) )
 && ( (this.getWzdd()==castOther.getWzdd()) || ( this.getWzdd()!=null && castOther.getWzdd()!=null && this.getWzdd().equals(castOther.getWzdd()) ) )
 && ( (this.getWzxw()==castOther.getWzxw()) || ( this.getWzxw()!=null && castOther.getWzxw()!=null && this.getWzxw().equals(castOther.getWzxw()) ) )
 && ( (this.getWzsxh()==castOther.getWzsxh()) || ( this.getWzsxh()!=null && castOther.getWzsxh()!=null && this.getWzsxh().equals(castOther.getWzsxh()) ) )
 && ( (this.getCldw()==castOther.getCldw()) || ( this.getCldw()!=null && castOther.getCldw()!=null && this.getCldw().equals(castOther.getCldw()) ) )
 && ( (this.getPzdm()==castOther.getPzdm()) || ( this.getPzdm()!=null && castOther.getPzdm()!=null && this.getPzdm().equals(castOther.getPzdm()) ) )
 && ( (this.getWzcldz()==castOther.getWzcldz()) || ( this.getWzcldz()!=null && castOther.getWzcldz()!=null && this.getWzcldz().equals(castOther.getWzcldz()) ) )
 && ( (this.getLxdh()==castOther.getLxdh()) || ( this.getLxdh()!=null && castOther.getLxdh()!=null && this.getLxdh().equals(castOther.getLxdh()) ) )
 && ( (this.getFlag()==castOther.getFlag()) || ( this.getFlag()!=null && castOther.getFlag()!=null && this.getFlag().equals(castOther.getFlag()) ) );
   }
   
   public int hashCode() {
         int result = 17;
         
         result = 37 * result + ( getCh() == null ? 0 : this.getCh().hashCode() );
         result = 37 * result + ( getCx() == null ? 0 : this.getCx().hashCode() );
         result = 37 * result + ( getCz() == null ? 0 : this.getCz().hashCode() );
         result = 37 * result + ( getWzdate() == null ? 0 : this.getWzdate().hashCode() );
         result = 37 * result + ( getWzdd() == null ? 0 : this.getWzdd().hashCode() );
         result = 37 * result + ( getWzxw() == null ? 0 : this.getWzxw().hashCode() );
         result = 37 * result + ( getWzsxh() == null ? 0 : this.getWzsxh().hashCode() );
         result = 37 * result + ( getCldw() == null ? 0 : this.getCldw().hashCode() );
         result = 37 * result + ( getPzdm() == null ? 0 : this.getPzdm().hashCode() );
         result = 37 * result + ( getWzcldz() == null ? 0 : this.getWzcldz().hashCode() );
         result = 37 * result + ( getLxdh() == null ? 0 : this.getLxdh().hashCode() );
         result = 37 * result + ( getFlag() == null ? 0 : this.getFlag().hashCode() );
         return result;
   }   
}

回复:Struts+Hibernate映射无主键表的问题

头有点晕

回复:Struts+Hibernate映射无主键表的问题

呵呵...可以使用 Query query=session.createQuery("from Wzcxtemp a");查询总记录数,

但不知道应该如何把数据显示出来!

回复:Struts+Hibernate映射无主键表的问题

解决了...
Session session=SessionFactory.currentSession();
Query query=session.createQuery("from Wzcxtemp a");
query.setMaxResults(10);

WzcxtempId wzid=new WzcxtempId();
Wzcxtemp wz=(Wzcxtemp)session.load(Wzcxtemp.class,wzid);

List list=query.list();
int size=list.size();

for(int i=0;i wz=(Wzcxtemp)list.get(i);
System.out.println(wz.getId().getCh());
}

就可以了


回复:Struts+Hibernate映射无主键表的问题

郁闷,如果是这样的话,那如果要进行条件查询呢?
分享到:
评论

相关推荐

    hibernate 无主键表映射

    在Java的持久化框架Hibernate中,无主键表映射是一种特殊情况,主要处理那些在数据库中没有明确单一主键的表。这种情况通常出现在那些通过多个字段共同唯一标识一条记录的复合主键(Composite Key)场景。本文将详细...

    Hibernate映射文件主键的生成

    本篇文章将详细讲解Hibernate映射文件中关于主键生成的各种策略及其配置,帮助开发者更好地理解和使用。 首先,主键(Primary Key)是数据库表中用于唯一标识一条记录的字段,其值在表中必须是唯一的,并且通常不...

    Hibernate注解映射联合主键

    在Hibernate中,有三种主要的注解方式来映射联合主键,以下是对这三种方式的详细解释: 1. **使用`@Embeddable`和`@Id`** 在这种映射方式中,联合主键的字段被放在一个单独的类中,这个类需要实现`java.io....

    hibernate映射主键生成策略native

    ### Hibernate映射主键生成策略native #### 一、引言 在ORM(对象关系映射)技术中,Hibernate作为一款流行的Java持久层框架,在处理数据持久化方面提供了丰富的功能和灵活性。其中,主键生成策略是Hibernate配置...

    hibernate复合主键映射

    本篇文章将深入探讨Hibernate如何处理复合主键映射,并通过实例进行解析。 复合主键在数据库设计中是常见的,例如,考虑一个订单明细表,其中订单号(order_id)和商品编号(product_id)结合在一起可以唯一识别一...

    生成hibernate映射文件工具

    Hibernate映射文件(通常为`.hbm.xml`格式)是这个桥梁,它定义了Java类与数据库表之间的映射规则,包括字段对应、主键设置、关联关系等。 映射文件中通常包含以下几个关键元素: 1. `&lt;class&gt;`:表示一个Java类,...

    hibernate 主键一对一映射(单向) 实例(java类)

    5. **配置Hibernate映射文件**:虽然在JPA中可以直接使用注解进行配置,但在一些情况下,你可能还需要为每个实体创建对应的Hibernate XML映射文件,以进一步自定义映射细节。 6. **数据操作**:在实际应用中,你...

    myeclipse自动生成hibernate映射文件

    Hibernate映射文件是XML格式的文件,它定义了数据库表与Java实体类之间的对应关系,包括字段映射、主键策略、关联关系等。映射文件让开发者无需编写SQL语句,就能通过Java对象进行数据库操作。 2. **MyEclipse ...

    hibernate映射和查询

    **hibernate映射与查询** Hibernate 是一个流行的 Java 应用程序开发框架,它提供了一个持久层解决方案,简化了数据库操作。对于初学者来说,理解 Hibernate 的映射和查询机制是至关重要的,因为它们构成了 ...

    Hibernate 映射文件自动生成

    【压缩包子文件的文件名称列表】:“hibernate映射文件自动生成.doc”很可能是这篇博文的文档形式,其中详细介绍了具体的操作步骤、使用工具或者自定义脚本,以帮助开发者理解并应用自动化的映射文件生成过程。...

    hibernate复合主键设置

    在Hibernate的映射文件(XML方式)或者使用JPA注解(Java方式)中,需要为复合主键提供相应的配置。对于XML配置,你可能会看到类似以下的设置: ```xml &lt;hibernate-mapping&gt; &lt;!-- 其他属性的映射 --&gt; ...

    Hibernate映射笔记

    Hibernate映射是ORM(对象关系映射)框架中的一项关键技术,它允许开发者在数据库表和Java对象之间建立映射关系,从而简化了数据访问层的开发工作。映射文件通常是`.hbm.xml`格式的XML文档,遵循特定的DTD(Document...

    Myeclipse生成Hibernate映射文件

    而MyEclipse作为一款强大的Java集成开发环境,提供了对Hibernate的良好支持,包括自动生成Hibernate映射文件的功能。本文将详细介绍如何在MyEclipse中创建和使用Hibernate映射文件。 首先,理解Hibernate映射文件...

    hibernate复合主键配置和使用

    三、配置Hibernate映射文件 在XML配置时代,我们需要在Hibernate的映射文件(.hbm.xml)中显式声明复合主键。现在,大多数项目都使用注解配置,但如果你仍然需要处理旧的项目,这里是如何配置的示例: ```xml ...

    hibernate的联合主键怎么设置

    使用 Hibernate 映射文件(XML 格式)来定义实体类与数据库表之间的映射。在这个例子中,映射文件应如下所示: ```xml &lt;hibernate-mapping auto-import="false"&gt; &lt;/hibernate-...

    hibernate使用主键关联的一对一关系

    在Java的持久化框架Hibernate中,一对一(OneToOne)关系是一种常见的对象关系映射(ORM)配置,用于表示两个实体类之间的一种唯一关联。在这个场景中,“hibernate使用主键关联的一对一关系”指的是通过共享主键来...

    Hibernate Annotation 共享主键一对一双向关联

    在Java的持久化框架中,Hibernate是一个非常常用且强大的ORM(对象关系映射)工具,它使得开发者可以方便地将数据库操作转化为面向对象的方式。在实际的项目开发中,我们经常遇到各种各样的关联关系,比如一对一、一...

    常用 Hibernate 映射配置说明.doc

    ### 常用Hibernate映射配置详解 #### 1. hibernate-mapping节点解析 `hibernate-mapping`节点是Hibernate映射文件中的顶级节点,用于定义一系列配置选项,控制整个映射文件的行为和映射规则。这些配置包括数据库...

    java根据实体类生成Hibernate映射文件

    首先,我们需要了解Hibernate映射文件的基本结构。通常,一个映射文件以`.hbm.xml`为扩展名,它使用XML格式来描述Java类和数据库表的对应关系。映射文件包含了类名、表名、字段及其数据类型等信息。例如: ```xml ...

Global site tag (gtag.js) - Google Analytics