休眠中的COMPOSITE-ID

时间:2015-04-20 20:24:04

标签: hibernate composite-key

来自

https://docs.jboss.org/hibernate/orm/3.3/reference/en/html/mapping.html

我不知道如何使用" composite-id"标签没有" class"参数,以及我设法让谷歌变得更加混乱的那几个例子。

所以我的例子

<class name="mainPack.Point" table="POINT">
    <composite-id>
        <key-property name="x" type="int">
            <column name="X" />
        </key-property>
        <key-property name="y" type="int">
            <column name="Y" />
        </key-property>
    </composite-id>
    <property name="str" type="java.lang.String">
        <column name="STR" />
    </property>
</class>

会起作用吗?

列是否

 <column name="X" />
 <column name="Y" /> 

出现在桌子上?

并且会创建另一个包含新&#34; id类&#34;的映射表,其中包含两个参数&#34; X&#34;,&#34; Y&#34;?

2 个答案:

答案 0 :(得分:0)

  1.   

    它会起作用吗?

  2. 是。我用hibernate-update创建了一个表,结果是:

    CREATE TABLE point
    (
      x integer NOT NULL,
      y integer NOT NULL,
      str character varying(255),
      CONSTRAINT point_pkey PRIMARY KEY (x, y)
    )
    

    1.   

      表中是否存在列?

    2.      是。你可以在上面看到它。

      1.   

        并且会创建另一个包含新&#34; id的映射表   class&#34;,有两个参数&#34; X&#34;,&#34; Y&#34;?

      2.      号


        这是java类:

        public class Point implements Serializable {
        
        private int x;
        private int y;
        private String str;
        
        public int getX() {
            return this.x;
        }
        
        public void setX(int x) {
            this.x = x;
        }
        
        public int getY() {
            return this.y;
        }
        
        public void setY(int y) {
            this.y = y;
        }
        
        public String getStr() {
            return this.str;
        }
        
        public void setStr(String str) {
            this.str = str;
        }
        
        @Override
        public int hashCode() {
            return new HashCodeBuilder().append(this.x).append(this.y).toHashCode();
        }
        
        @Override
        public boolean equals(Object obj) {
            if (this == obj) {
                return true;
            }
        
            if (!(obj instanceof Point)) {
                return false;
            }
        
            Point other = (Point) obj;
        
            return (this.getX() == other.getX()) && (this.getY() == other.getY());
        }
        

        }

答案 1 :(得分:0)

// Composite primary key bean

import java.io.Serializable;

public class CoursePk implements Serializable {

private static final long serialVersionUID = 1L;
private String title;
private String tutor;

public CoursePk(){

}
public String getTitle() {
    return title;
}
public void setTitle(String title) {
    this.title = title;
}
public String getTutor() {
    return tutor;
}
public void setTutor(String tutor) {
    this.tutor = tutor;
}
}


// Course class for composite primary key
@Entity
@Table(name="course")
public class Course implements Serializable {
private static final long serialVersionUID = 1L;

@EmbeddedId                    // composite key
private CoursePk id=null;

private int totalStudents;

public int getTotalStudents() {
    return totalStudents;
}

public void setTotalStudents(int totalStudents) {
    this.totalStudents = totalStudents;
}

public CoursePk getId() {
    return id;
}
public void setId(CoursePk id) {
    this.id = id;
}
}


 // Hibernate Util to get Session factory
import org.hibernate.SessionFactory;
import org.hibernate.boot.registry.StandardServiceRegistryBuilder;
import org.hibernate.cfg.Configuration;
public class HibernateUtil {
private HibernateUtil(){

}
 private static SessionFactory sessionFactory ;
 static {
    Configuration configuration = new Configuration();

    configuration.addAnnotatedClass (Course.class);
    configuration.setProperty("connection.driver_class","com.mysql.jdbc.Driver");
    configuration.setProperty("hibernate.connection.url", "jdbc:mysql://localhost:3306/hibernate");                                
    configuration.setProperty("hibernate.connection.username", "root");     
    configuration.setProperty("hibernate.connection.password", "root");
    configuration.setProperty("dialect", "org.hibernate.dialect.MySQLDialect");
    configuration.setProperty("hibernate.hbm2ddl.auto", "update");
    configuration.setProperty("hibernate.show_sql", "true");
    configuration.setProperty(" hibernate.connection.pool_size", "10");

    StandardServiceRegistryBuilder builder = new StandardServiceRegistryBuilder().applySettings(configuration.getProperties());
    sessionFactory = configuration.buildSessionFactory(builder.build());
 }
public  SessionFactory getSessionFactory() {
    return sessionFactory;
}

public static HibernateUtil getInstance(){
    return new HibernateUtil();
}
} 

// Main Class for testing composite primary key
public class CompositePrimaryKeyTest {
public static void main(String[] args) {
    CoursePk pk=new CoursePk();
    pk.setTitle("Java Book");
    pk.setTutor("Deepak");

    Course course=new Course();
    course.setTotalStudents(100);
    course.setId(pk);
    Session   session=HibernateUtil.getInstance().getSessionFactory().openSession();
    session.beginTransaction();

    session.save(course);

    session.getTransaction().commit();
}
}