当前位置: 代码迷 >> J2EE >> Hibernate中使用Annotation方式产生联合主键,该如何处理
  详细解决方案

Hibernate中使用Annotation方式产生联合主键,该如何处理

热度:81   发布时间:2016-04-22 01:45:54.0
Hibernate中使用Annotation方式产生联合主键
Family.java
Java code
package com.chk.model;import javax.persistence.Id;import javax.persistence.IdClass;@IdClass(value = FamilyPK.class)public class Family {    private String father;    private String mother;    private String name;    private int count;    @Id    public String getFather() {        return father;    }    public void setFather(String father) {        this.father = father;    }    @Id    public String getMother() {        return mother;    }    public void setMother(String Mother) {        this.mother = Mother;    }    public String getName() {        return name;    }    public void setName(String name) {        this.name = name;    }    public int getCount() {        return count;    }    public void setCount(int count) {        this.count = count;    }}

FamilyPK.java
Java code
package com.chk.model;import java.io.Serializable;public class FamilyPK implements Serializable {    private String father;    private String mother;    public String getFather() {        return father;    }    public void setFather(String father) {        this.father = father;    }    public String getMother() {        return mother;    }    public void setMother(String Mother) {        this.mother = Mother;    }    @Override    public int hashCode() {        // TODO Auto-generated method stub                return this.mother.hashCode();    }    @Override    public boolean equals(Object obj) {        // TODO Auto-generated method stub        if(obj instanceof FamilyPK){            FamilyPK pk= (FamilyPK)obj;            if(this.father.equals(pk.getFather()) && this.mother.equals(pk.getMother())){                return true;            }        }        return false;    }}

FamilyPKTest.java
Java code
package com.chk.model.test;import org.hibernate.Session;import org.hibernate.SessionFactory;import org.hibernate.cfg.Configuration;import org.junit.Test;import com.chk.model.Family;public class FamilyPKTest {    @Test    public void test() {        Family f = new Family();        f.setFather("chengke");        f.setMother("jiajia");        f.setName("family");        f.setCount(3);        Configuration cfg = new Configuration();        SessionFactory sf = cfg.configure().buildSessionFactory();        Session session = sf.openSession();        session.beginTransaction();        session.save(f);        session.beginTransaction().commit();        session.close();        sf.close();    }}


出现的错误提示:
XML code
org.hibernate.PropertyNotFoundException: Could not find a getter for pk in class com.chk.model.Family    at org.hibernate.property.BasicPropertyAccessor.createGetter(BasicPropertyAccessor.java:326)    at org.hibernate.property.BasicPropertyAccessor.getGetter(BasicPropertyAccessor.java:320)    at org.hibernate.tuple.PropertyFactory.getGetter(PropertyFactory.java:191)    at org.hibernate.tuple.PropertyFactory.buildIdentifierProperty(PropertyFactory.java:67)    at org.hibernate.tuple.entity.EntityMetamodel.<init>(EntityMetamodel.java:135)    at org.hibernate.persister.entity.AbstractEntityPersister.<init>(AbstractEntityPersister.java:485)    at org.hibernate.persister.entity.SingleTableEntityPersister.<init>(SingleTableEntityPersister.java:133)    at org.hibernate.persister.PersisterFactory.createClassPersister(PersisterFactory.java:84)    at org.hibernate.impl.SessionFactoryImpl.<init>(SessionFactoryImpl.java:286)    at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1872)    at com.chk.model.test.FamilyPKTest.test(FamilyPKTest.java:22)    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)    at java.lang.reflect.Method.invoke(Method.java:601)    at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:44)    at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15)    at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:41)    at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:20)    at org.junit.runners.BlockJUnit4ClassRunner.runNotIgnored(BlockJUnit4ClassRunner.java:79)    at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:71)    at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:49)    at org.junit.runners.ParentRunner$3.run(ParentRunner.java:193)    at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:52)    at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:191)    at org.junit.runners.ParentRunner.access$000(ParentRunner.java:42)    at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:184)    at org.junit.runners.ParentRunner.run(ParentRunner.java:236)    at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:50)    at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:467)    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683)    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390)    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197)
  相关解决方案