主键类如下:
package net.kong.wolf.stat.db.entity;
import java.io.Serializable;
import java.util.Date;
import javax.persistence.Column;
import javax.persistence.Embeddable;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;
@Embeddable
public class HourDataPK implements Serializable {
    /** *//**
     *
     */
    private static final long serialVersionUID = 1L;
    @ManyToOne
    @JoinColumn(name = "path_id", nullable = false)
    private Path path;
    @Column(name = "stat_date")
    @Temporal(TemporalType.DATE)
    private Date statDate;
    public Path getPath() {
        return path;
    }
    public void setPath(Path path) {
        this.path = path;
    }
    public Date getStatDate() {
        return statDate;
    }
    public void setStatDate(Date statDate) {
        this.statDate = statDate;
    }
    
}实体类如下:
package net.kong.wolf.stat.db.entity;
import java.io.Serializable;
import javax.persistence.EmbeddedId;
import javax.persistence.Entity;
import javax.persistence.Table;
import net.kong.wolf.stat.core.Text;
@Entity
@Table(name = "TB_HOUR_DATA")
public class HourData implements Serializable {
    /** *//**
     *
     */
    private static final long serialVersionUID = 1L;
    @EmbeddedId
    private HourDataPK pk;
    private String value;
    public String getValue() {
        return value;
    }
    public void setValue(String value) {
        this.value = value;
    }
    public int[] getHours() {
        return parseValue(value);
    }
    private int[] parseValue(String value) {
        int[] result = new int[24];
        for (int i = 0; i < 24; i++) {
            result[i] = -1;
        }
        if (value == null) {
            return result;
        }
        String[] hs = Text.splitCSV(value);
        int len = Math.min(24, hs.length);
        for (int i = 0; i < len; i++) {
            result[i] = Text.parseInt(hs[i], -1);
        }
        return result;
    }
    public void setHours(int[] hours) {
        int[] tHours = parseValue(value);
        StringBuilder sb = new StringBuilder();
        int len = Math.min(24, hours.length);
        for (int i = 0; i < len; i++) {
            sb.append(hours[i] < 0 ? tHours[i] : hours[i]).append(',');
        }
        sb.deleteCharAt(sb.length() - 1);
        this.value = sb.toString();
    }
    public HourDataPK getPk() {
        return pk;
    }
    public void setPk(HourDataPK pk) {
        this.pk = pk;
    }
}我想再建一个实体类,其中的一个属性path_id 外键关联HourData 表,要怎么加条件呢,下面这种就会提示错误。需要加两个键
package net.kong.wolf.stat.db.entity;
import java.io.Serializable;
import java.util.Date;
import javax.persistence.Column;
import javax.persistence.Embeddable;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;
@Embeddable
public class Test implements Serializable {
    /** *//**
     *
     */
    private static final long serialVersionUID = 1L;
    @ManyToOne
    @JoinColumn(name = "path_id", nullable = false)
    private HourData hD;
    }

解决方案 »

  1.   

    组件的话有个例子,希望有帮助/hibernate_001/src/com/myj/hibernate/model/Husband.javapackage com.myj.hibernate.model;import javax.persistence.Embedded;
    import javax.persistence.Entity;
    import javax.persistence.Enumerated;
    import javax.persistence.GeneratedValue;
    import javax.persistence.Id;@Entity
    public class Husband {
    private int id;
    private String name;
    private Wife wife; @Id
    @GeneratedValue
    public int getId() {
       return id;
    }public void setId(int id) {
       this.id = id;
    }public String getName() {
       return name;
    }public void setName(String name) {
       this.name = name;
    }@Embedded
    public Wife getWife() {
       return wife;
    }public void setWife(Wife wife) {
       this.wife = wife;
    }
    }
    /hibernate_001/src/com/myj/hibernate/model/Wife.javapackage com.myj.hibernate.model;public class Wife {
    private String wifeName;public String getWifeName() {
       return wifeName;
    }public void setWifeName(String wifeName) {
       this.wifeName = wifeName;
    }}
    /hibernate_001/src/hibernate.cfg.xml<?xml version='1.0' encoding='utf-8'?>
    <!DOCTYPE hibernate-configuration PUBLIC
            "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
            "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd"><hibernate-configuration><session-factory>   <!-- Database connection settings -->
       <property name="connection.driver_class">com.mysql.jdbc.Driver</property>
       <property name="connection.url">jdbc:mysql://localhost:3306/hibernate</property>
       <property name="connection.username">root</property>
       <property name="connection.password">123</property>
      
       <!--
       <property name="connection.driver_class">oracle.jdbc.driver.OracleDriver</property>
       <property name="connection.url">jdbc:oracle:thin:@localhost:1521:orcl</property>
       <property name="connection.username">scott</property>
       <property name="connection.password">tiger</property>-->
      
       <!-- JDBC connection pool (use the built-in) -->
       <property name="connection.pool_size">1</property>   <!-- SQL dialect -->
       <property name="dialect">org.hibernate.dialect.MySQLDialect</property> 
       <!-- <property name="dialect">org.hibernate.dialect.Oracle10gDialect</property> -->   <!-- Enable Hibernate's automatic session context management --> 
       <property name="current_session_context_class">thread</property> 
      
       <!-- Disable the second-level cache -->
       <property name="cache.provider_class">org.hibernate.cache.NoCacheProvider</property>
       
       <!-- Echo all executed SQL to stdout -->
       <property name="show_sql">true</property>
      
       <property name="format_sql">true</property>   <!-- Drop and re-create the database schema on startup -->
       <property name="hbm2ddl.auto">create</property>   <mapping class="com.myj.hibernate.model.Husband" />
    </session-factory></hibernate-configuration>/hibernate_001/test/com/myj/hibernate/model/HibernateORMMappingTest.javapackage com.myj.hibernate.model;
    import org.hibernate.cfg.AnnotationConfiguration;
    import org.hibernate.tool.hbm2ddl.SchemaExport;
    import org.junit.Test;
    public class HibernateORMMappingTest {
      
    @Test
    public void testSchemaExport() {
       new SchemaExport(new AnnotationConfiguration().configure()).create(true, true);
    }}
      

  2.   

    哦,我好像看错了,是联合主键吗,是的话参考
    http://hi.baidu.com/martian_ma/blog/item/ca053ede24286a1848540330.html