Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何创建复合主键hibernate JPA?_Java_Hibernate_Hibernate Mapping_Tapestry_Composite Key - Fatal编程技术网

Java 如何创建复合主键hibernate JPA?

Java 如何创建复合主键hibernate JPA?,java,hibernate,hibernate-mapping,tapestry,composite-key,Java,Hibernate,Hibernate Mapping,Tapestry,Composite Key,我尝试使用HibernateJPA从2个外键创建表中的复合主键,但出现了错误。我在网上找到了一些,但什么也没有找到 表之间的关系如下所示: Table Client clientID(PK) FirstName LastName . Table CarService serviceID(PK) DescriptionOfFailure . . Table ServiceDepartment clientID(PK) serv

我尝试使用HibernateJPA从2个外键创建表中的复合主键,但出现了错误。我在网上找到了一些,但什么也没有找到

表之间的关系如下所示:

   Table Client

    clientID(PK)

    FirstName

    LastName
    .


    Table CarService
    serviceID(PK)
    DescriptionOfFailure
.
.
Table ServiceDepartment
clientID(PK)
serviceID(PK)
price
.
@Entity
public class ServiceDepartmentBean implements ServiceDepartmentI {

    @EmbeddedId
    private ServiceDepartmentPK serviceDepartmentPK = new ServiceDepartmentPK();

    @Column(name="clientID", nullable=false, updatable=false, insertable=false)
    private  Long client;
    @Column(name="serviceId", nullable=false, updatable=false, insertable=false)
    private Long service;

    @Column
    private double price;
     .
    .
    .
    .
    public void setClient(ClientI client){
        serviceDepartmentPK.setClient(client);
    }
    public void setService(CarServiceI service){
        serviceDepartmentPK.setService(service);
    }
    public ClientI getClient(){
        return serviceDepartmentPK.getClient();
    }
    public CarServiceI getService(){
        return serviceDepartmentPK.getService();
    }
@Entity
public class CarServiceBean implements CarServiceI {

    @Id
    @GeneratedValue
    private long serviceId;

    @Column(nullable = false)
    private String descriptionOfFailure;

    @OneToMany(mappedBy="service")
private List<ServiceDepartmentI> servicesDepartments;

public List<ServiceDepartmentI> getServicesDepartments() {
    return servicesDepartments;
}
    .
    .
    //set i get method
@Entity
public class ClientBean implements ClientI {
        @Id
    @GeneratedValue
    private long clientID;

    @Column(nullable = false)
    private String firstName;

    @Column(nullable = false)
    private String lastName;

    @OneToMany(mappedBy = "client")
private List<ServiceDepartmentI> servicesDepartments;

public void setServicesDepartments(List<ServiceDepartmentI> servicesDepartments) {
    this.servicesDepartments = servicesDepartments;
}

public List<ServiceDepartmentI> getServicesDepartments() {
    return servicesDepartments;
}
}
public class ServiceDepartmentPK implements Serializable {

    @ManyToOne
    private ClientI client;

    @ManyToOne
    private CarServiceI service;

    public void setClient(ClientI client) {
        this.client = client;
    }

    public ClientI getClient() {
        return client;
    }

    public void setService(CarServiceI service) {
        this.service = service;
    }

    public CarServiceI getService() {
        return service;
    }
}
我的代码的实现如下所示:

   Table Client

    clientID(PK)

    FirstName

    LastName
    .


    Table CarService
    serviceID(PK)
    DescriptionOfFailure
.
.
Table ServiceDepartment
clientID(PK)
serviceID(PK)
price
.
@Entity
public class ServiceDepartmentBean implements ServiceDepartmentI {

    @EmbeddedId
    private ServiceDepartmentPK serviceDepartmentPK = new ServiceDepartmentPK();

    @Column(name="clientID", nullable=false, updatable=false, insertable=false)
    private  Long client;
    @Column(name="serviceId", nullable=false, updatable=false, insertable=false)
    private Long service;

    @Column
    private double price;
     .
    .
    .
    .
    public void setClient(ClientI client){
        serviceDepartmentPK.setClient(client);
    }
    public void setService(CarServiceI service){
        serviceDepartmentPK.setService(service);
    }
    public ClientI getClient(){
        return serviceDepartmentPK.getClient();
    }
    public CarServiceI getService(){
        return serviceDepartmentPK.getService();
    }
@Entity
public class CarServiceBean implements CarServiceI {

    @Id
    @GeneratedValue
    private long serviceId;

    @Column(nullable = false)
    private String descriptionOfFailure;

    @OneToMany(mappedBy="service")
private List<ServiceDepartmentI> servicesDepartments;

public List<ServiceDepartmentI> getServicesDepartments() {
    return servicesDepartments;
}
    .
    .
    //set i get method
@Entity
public class ClientBean implements ClientI {
        @Id
    @GeneratedValue
    private long clientID;

    @Column(nullable = false)
    private String firstName;

    @Column(nullable = false)
    private String lastName;

    @OneToMany(mappedBy = "client")
private List<ServiceDepartmentI> servicesDepartments;

public void setServicesDepartments(List<ServiceDepartmentI> servicesDepartments) {
    this.servicesDepartments = servicesDepartments;
}

public List<ServiceDepartmentI> getServicesDepartments() {
    return servicesDepartments;
}
}
public class ServiceDepartmentPK implements Serializable {

    @ManyToOne
    private ClientI client;

    @ManyToOne
    private CarServiceI service;

    public void setClient(ClientI client) {
        this.client = client;
    }

    public ClientI getClient() {
        return client;
    }

    public void setService(CarServiceI service) {
        this.service = service;
    }

    public CarServiceI getService() {
        return service;
    }
}
任何帮助都将不胜感激=)

重构stacktrace后出现新错误:

[INFO] annotations.EntityBinder Bind entity com.fit.beans.ServiceDepartmentBean on table ServiceDepartmentBean
[ERROR] ioc.Registry Error invoking constructor public org.apache.tapestry5.internal.hibernate.HibernateSessionSourceImpl(org.slf4j.Logger,java.util.List): java.lang.NullPointerException
[ERROR] ioc.Registry Operations trace:
[ERROR] ioc.Registry [ 1] Realizing service HibernateSessionSource
[ERROR] ioc.Registry [ 2] Instantiating service HibernateSessionSource implementation via org.apache.tapestry5.internal.hibernate.HibernateSessionSourceImpl(Logger, List) (at HibernateSessionSourceImpl.java:36) via org.apache.tapestry5.hibernate.HibernateCoreModule.bind(ServiceBinder) (at HibernateCoreModule.java:45)
[ERROR] ioc.Registry [ 3] Invoking constructor org.apache.tapestry5.internal.hibernate.HibernateSessionSourceImpl(Logger, List) (at HibernateSessionSourceImpl.java:36) via org.apache.tapestry5.hibernate.HibernateCoreModule.bind(ServiceBinder) (at HibernateCoreModule.java:45) (for service 'HibernateSessionSource')
[ERROR] HibernateCoreModule.HibernateSessionSource Construction of service HibernateSessionSource failed: Error invoking constructor public org.apache.tapestry5.internal.hibernate.HibernateSessionSourceImpl(org.slf4j.Logger,java.util.List): java.lang.NullPointerException
org.apache.tapestry5.ioc.internal.OperationException: Error invoking constructor public org.apache.tapestry5.internal.hibernate.HibernateSessionSourceImpl(org.slf4j.Logger,java.util.List): java.lang.NullPointerException
    at org.apache.tapestry5.ioc.internal.OperationTrackerImpl.logAndRethrow(OperationTrackerImpl.java:121)
    at org.apache.tapestry5.ioc.internal.OperationTrackerImpl.invoke(OperationTrackerImpl.java:88)
    at org.apache.tapestry5.ioc.internal.PerThreadOperationTracker.invoke(PerThreadOperationTracker.java:87)
    at org.apache.tapestry5.ioc.internal.RegistryImpl.invoke(RegistryImpl.java:1121)
    at org.apache.tapestry5.ioc.internal.util.ConstructionPlan.createObject(ConstructionPlan.java:60)
    at org.apache.tapestry5.ioc.internal.ConstructorServiceCreator.createObject(ConstructorServiceCreator.java:61)
    at org.apache.tapestry5.ioc.internal.OperationTrackingObjectCreator$1.invoke(OperationTrackingObjectCreator.java:45)
    at org.apache.tapestry5.ioc.internal.OperationTrackerImpl.invoke(OperationTrackerImpl.java:74)
    at org.apache.tapestry5.ioc.internal.PerThreadOperationTracker.invoke(PerThreadOperationTracker.java:87)
    at org.apache.tapestry5.ioc.internal.RegistryImpl.invoke(RegistryImpl.java:1121)
[INFO] cfg.AnnotationBinder Binding entity from annotated class: com.fit.beans.CarServiceBean
[INFO] annotations.EntityBinder Bind entity com.fit.beans.CarServiceBean on table CarServiceBean
[INFO] cfg.AnnotationBinder Binding entity from annotated class: com.fit.beans.ServiceDepartmentBean
[INFO] annotations.EntityBinder Bind entity com.fit.beans.ServiceDepartmentBean on table ServiceDepartmentBean
[ERROR] ioc.Registry Error invoking constructor public org.apache.tapestry5.internal.hibernate.HibernateSessionSourceImpl(org.slf4j.Logger,java.util.List): No identifier specified for entity: com.fit.beans.ServiceDepartmentBean
[ERROR] ioc.Registry Operations trace:
[ERROR] ioc.Registry [ 1] Realizing service HibernateSessionSource
[ERROR] ioc.Registry [ 2] Instantiating service HibernateSessionSource implementation via org.apache.tapestry5.internal.hibernate.HibernateSessionSourceImpl(Logger, List) (at HibernateSessionSourceImpl.java:36) via org.apache.tapestry5.hibernate.HibernateCoreModule.bind(ServiceBinder) (at HibernateCoreModule.java:45)
[ERROR] ioc.Registry [ 3] Invoking constructor org.apache.tapestry5.internal.hibernate.HibernateSessionSourceImpl(Logger, List) (at HibernateSessionSourceImpl.java:36) via org.apache.tapestry5.hibernate.HibernateCoreModule.bind(ServiceBinder) (at HibernateCoreModule.java:45) (for service 'HibernateSessionSource')
[ERROR] HibernateCoreModule.HibernateSessionSource Construction of service HibernateSessionSource failed: Error invoking constructor public org.apache.tapestry5.internal.hibernate.HibernateSessionSourceImpl(org.slf4j.Logger,java.util.List): No identifier specified for entity: com.fit.beans.ServiceDepartmentBean
org.apache.tapestry5.ioc.internal.OperationException: Error invoking constructor public org.apache.tapestry5.internal.hibernate.HibernateSessionSourceImpl(org.slf4j.Logger,java.util.List): No identifier specified for entity: com.fit.beans.ServiceDepartmentBean
    at org.apache.tapestry5.ioc.internal.OperationTrackerImpl.logAndRethrow(OperationTrackerImpl.java:121)
    at org.apache.tapestry5.ioc.internal.OperationTrackerImpl.invoke(OperationTrackerImpl.java:88)
    at org.apache.tapestry5.ioc.internal.PerThreadOperationTracker.invoke(PerThreadOperationTracker.java:87)
    at org.apache.tapestry5.ioc.internal.RegistryImpl.invoke(RegistryImpl.java:1121)
    at org.apache.tapestry5.ioc.internal.util.ConstructionPlan.createObject(ConstructionPlan.java:60)
    at org.apache.tapestry5.ioc.internal.ConstructorServiceCreator.createObject(ConstructorServiceCreator.java:61)
    at org.apache.tapestry5.ioc.internal.OperationTrackingObjectCreator$1.invoke(OperationTrackingObjectCreator.java:45)
    at org.apache.tapestry5.ioc.internal.OperationTrackerImpl.invoke(OperationTrackerImpl.java:74)
    at org.apache.tapestry5.ioc.internal.PerThreadOperationTracker.invoke(PerThreadOperationTracker.java:87)
    at org.apache.tapestry5.ioc.internal.RegistryImpl.invoke(RegistryImpl.java:1121)
    at org.apache.tapestry5.ioc.internal.OperationTrackingObjectCreator.createObject(OperationTrackingObjectCreator.java:49)
    at org.apache.tapestry5.ioc.internal.SingletonServiceLifecycle.createService(SingletonServiceLifecycle.java:29)
    at org.apache.tapestry5.ioc.internal.LifecycleWrappedServiceCreator.createObject(LifecycleWrappedServiceCreator.java:46)
    at org.apache.tapestry5.ioc.internal.AdvisorStackBuilder.createObject(AdvisorStackBuilder.java:63)
    at org.apache.tapestry5.ioc.internal.InterceptorStackBuilder.createObject(InterceptorStackBuilder.java:54)
    at org.apache.tapestry5.ioc.internal.RecursiveServiceCreationCheckWrapper.createObject(RecursiveServiceCreationCheckWrapper.java:60)
    at org.apache.tapestry5.ioc.internal.OperationTrackingObjectCreator$1.invoke(OperationTrackingObjectCreator.java:45)
    at org.apache.tapestry5.ioc.internal.OperationTrackerImpl.invoke(OperationTrackerImpl.java:74)
    at org.apache.tapestry5.ioc.internal.PerThreadOperationTracker.invoke(PerThreadOperationTracker.java:87)
.
.
.
.
.
Caused by: java.lang.RuntimeException: Error invoking constructor public org.apache.tapestry5.internal.hibernate.HibernateSessionSourceImpl(org.slf4j.Logger,java.util.List): No identifier specified for entity: com.fit.beans.ServiceDepartmentBean
    at org.apache.tapestry5.ioc.internal.util.ConstructorInvoker.invoke(ConstructorInvoker.java:57)
    at org.apache.tapestry5.ioc.internal.util.LoggingInvokableWrapper.invoke(LoggingInvokableWrapper.java:42)
    at org.apache.tapestry5.ioc.internal.OperationTrackerImpl.invoke(OperationTrackerImpl.java:74)
    ... 72 more
Caused by: org.hibernate.AnnotationException: No identifier specified for entity: com.fit.beans.ServiceDepartmentBean
    at org.hibernate.cfg.AnnotationBinder.bindClass(AnnotationBinder.java:672)
    at org.hibernate.cfg.AnnotationConfiguration.processArtifactsOfType(AnnotationConfiguration.java:546)
    at org.hibernate.cfg.AnnotationConfiguration.secondPassCompile(AnnotationConfiguration.java:291)
    at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1333)
    at org.hibernate.cfg.AnnotationConfiguration.buildSessionFactory(AnnotationConfiguration.java:867)
    at org.apache.tapestry5.internal.hibernate.HibernateSessionSourceImpl.<init>(HibernateSessionSourceImpl.java:46)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
    at java.lang.reflect.Constructor.newInstance(Constructor.java:513)
    at org.apache.tapestry5.ioc.internal.util.ConstructorInvoker.invoke(ConstructorInvoker.java:48)
    ... 74 more
[INFO]cfg.AnnotationBinder绑定实体来自注释类:com.fit.beans.CarServiceBean
[信息]annotations.EntityBinder绑定表CarServiceBean上的实体com.fit.beans.CarServiceBean
[INFO]cfg.AnnotationBinder绑定实体来自注释类:com.fit.beans.ServiceDepartmentBean
[INFO]表ServiceDepartmentBean上的annotations.EntityBinder绑定实体com.fit.beans.ServiceDepartmentBean
[ERROR]ioc.Registry调用构造函数public org.apache.tapestry5.internal.hibernate.HibernateSessionSourceImpl时出错(org.slf4j.Logger,java.util.List):未为实体com.fit.beans.ServiceDepartmentBean指定标识符
[错误]ioc。注册表操作跟踪:
[错误]ioc.Registry[1]正在实现服务HibernateSessionSource
[错误]ioc.Registry[2]通过org.apache.tapestry5.internal.hibernate.HibernateSessionSourceImpl(记录器,列表)(位于HibernateSessionSourceImpl.java:36)通过org.apache.tapestry5.hibernate.HibernateCoreModule.bind(ServiceBinder)(位于HibernateCoreModule.java:45)实例化服务HibernateSessionSourceImpl实现
[错误]ioc.Registry[3]调用构造函数org.apache.tapestry5.internal.hibernate.HibernateSessionSourceImpl(记录器,列表)(位于HibernateSessionSourceImpl.java:36)通过org.apache.tapestry5.hibernate.HibernateCoreModule.bind(ServiceBinder)(位于HibernateCoreModule.java:45)(用于服务“HibernateSessionSource”)
[错误]HibernateCremodule.HibernateSessionSource服务的构造HibernateSessionSource失败:调用构造函数public org.apache.tapestry5.internal.hibernate.HibernateSessionSourceImpl(org.slf4j.Logger,java.util.List)时出错:未为实体com.fit.beans.ServiceDepartmentBean指定标识符
org.apache.tapestry5.ioc.internal.OperationException:调用构造函数public org.apache.tapestry5.internal.hibernate.HibernateSessionSourceImpl(org.slf4j.Logger,java.util.List)时出错:未为实体com.fit.beans.ServiceDepartmentBean指定标识符
位于org.apache.tapestry5.ioc.internal.OperationTrackerImpl.logandertrow(OperationTrackerImpl.java:121)
位于org.apache.tapestry5.ioc.internal.OperationTrackerImpl.invoke(OperationTrackerImpl.java:88)
位于org.apache.tapestry5.ioc.internal.PerThreadOperationTracker.invoke(PerThreadOperationTracker.java:87)
位于org.apache.tapestry5.ioc.internal.RegistryImpl.invoke(RegistryImpl.java:1121)
位于org.apache.tapestry5.ioc.internal.util.ConstructionPlan.createObject(ConstructionPlan.java:60)
位于org.apache.tapestry5.ioc.internal.ConstructorServiceCreator.createObject(ConstructorServiceCreator.java:61)
位于org.apache.tapestry5.ioc.internal.OperationTrackingObjectCreator$1.invoke(OperationTrackingObjectCreator.java:45)
位于org.apache.tapestry5.ioc.internal.OperationTrackerImpl.invoke(OperationTrackerImpl.java:74)
位于org.apache.tapestry5.ioc.internal.PerThreadOperationTracker.invoke(PerThreadOperationTracker.java:87)
位于org.apache.tapestry5.ioc.internal.RegistryImpl.invoke(RegistryImpl.java:1121)
位于org.apache.tapestry5.ioc.internal.OperationTrackingObjectCreator.createObject(OperationTrackingObjectCreator.java:49)
位于org.apache.tapestry5.ioc.internal.SingletonServiceLifecycle.createService(SingletonServiceLifecycle.java:29)
位于org.apache.tapestry5.ioc.internal.LifecycleWrappedServiceCreator.createObject(LifecycleWrappedServiceCreator.java:46)
位于org.apache.tapestry5.ioc.internal.AdvisorStackBuilder.createObject(AdvisorStackBuilder.java:63)
位于org.apache.tapestry5.ioc.internal.InterceptorStackBuilder.createObject(InterceptorStackBuilder.java:54)
位于org.apache.tapestry5.ioc.internal.RecursiveServiceCreationCheckRapper.createObject(RecursiveServiceCreationCheckRapper.java:60)
位于org.apache.tapestry5.ioc.internal.OperationTrackingObjectCreator$1.invoke(OperationTrackingObjectCreator.java:45)
位于org.apache.tapestry5.ioc.internal.OperationTrackerImpl.invoke(OperationTrackerImpl.java:74)
位于org.apache.tapestry5.ioc.internal.PerThreadOperationTracker.invoke(PerThreadOperationTracker.java:87)
.
.
.
.
.
原因:java.lang.RuntimeException:调用构造函数public org.apache.tapestry5.internal.hibernate.HibernateSessionSourceImpl(org.slf4j.Logger,java.util.List)时出错:未为实体指定标识符:com.fit.beans.ServiceDepartmentBean
位于org.apache.tapestry5.ioc.internal.util.ConstructorInvoker.invoke(ConstructorInvoker.java:57)
位于org.apache.tapestry5.ioc.internal.util.LoggingInvokableWrapper.invoke(LoggingInvokableWrapper.java:42)
位于org.apache.tapestry5.ioc.internal.OperationTrackerImpl.invoke(OperationTrackerImpl.java:74)
... 72多
原因:org.hibernate.AnnotationException:未为实体com.fit.beans.ServiceDepartmentBean指定标识符
位于org.hibernate.cfg.AnnotationBinder.bindClass(AnnotationBinder.java:672)
位于org.hibernate.cfg.AnnotationConfiguration.processArtifactsOfType(AnnotationConfiguration.java:546)
位于org.hibernate.cfg.AnnotationConfiguration.secondPassCompile(AnnotationConfiguration.java:291)
位于org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1333)
位于org.hibernate.cfg.AnnotationConfiguration.buildSessionFactory(AnnotationConfiguration.java:867)
位于org.apache.tapestry5.internal.hibernate.HibernateSessionSourceImpl.(HibernateSessionSourceImpl.java:46)
位于sun.reflect.NativeConstructorAccessorImpl.newInstance0(本机方法)
位于sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
在sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:2