Java 未添加JPA一对一关系

Java 未添加JPA一对一关系,java,mysql,hibernate,jpa,one-to-one,Java,Mysql,Hibernate,Jpa,One To One,我在数据库中有一对一的两个表: CREATE TABLE IF NOT EXISTS `toproject`.`osoby` ( `id` INT NOT NULL AUTO_INCREMENT , `imie` VARCHAR(45) NOT NULL , `nazwisko` VARCHAR(45) NOT NULL , `pesel` VARCHAR(11) NOT NULL , `telefon` VARCHAR(45) NULL , `pensja` VARC

我在数据库中有一对一的两个表:

CREATE  TABLE IF NOT EXISTS `toproject`.`osoby` (
  `id` INT NOT NULL AUTO_INCREMENT ,
  `imie` VARCHAR(45) NOT NULL ,
  `nazwisko` VARCHAR(45) NOT NULL ,
  `pesel` VARCHAR(11) NOT NULL ,
  `telefon` VARCHAR(45) NULL ,
  `pensja` VARCHAR(45) NULL ,
  `typ` VARCHAR(45) NOT NULL ,
  `stanowisko_id` INT NULL ,
  PRIMARY KEY (`id`) ,
  UNIQUE INDEX `pesel_UNIQUE` (`pesel` ASC) ,
  INDEX `fk_osoby_stanowiska_idx` (`stanowisko_id` ASC) ,
  CONSTRAINT `fk_osoby_stanowiska`
    FOREIGN KEY (`stanowisko_id` )
    REFERENCES `toproject`.`stanowiska` (`id` )
    ON DELETE NO ACTION
    ON UPDATE NO ACTION)
ENGINE = InnoDB;

CREATE  TABLE IF NOT EXISTS `toproject`.`adresy` (
  `id` INT NOT NULL AUTO_INCREMENT,
  `ulica` VARCHAR(45) NOT NULL ,
  `miejscowosc` VARCHAR(45) NOT NULL ,
  INDEX `fk_adres_osoby1_idx` (`id` ASC) ,
  PRIMARY KEY (`id`) ,
  CONSTRAINT `fk_adres_osoby1`
    FOREIGN KEY (`id` )
    REFERENCES `toproject`.`osoby` (`id` )
    ON DELETE NO ACTION
    ON UPDATE NO ACTION)
ENGINE = InnoDB;
我必须使用这个
@继承(strategy=InheritanceType.SINGLE\u TABLE)
我编写Java实体类:

头等舱:

@Entity
@Table(name = "osoby")
@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
@DiscriminatorColumn(name="typ", discriminatorType=DiscriminatorType.STRING)
public class Osoba implements Serializable {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Basic(optional = false)
    @Column(name = "id")
    private Integer id;
    @Basic(optional = false)
    @NotNull
    @Size(min = 1, max = 45)
    @Column(name = "imie")
    private String imie;
    @Basic(optional = false)
    @NotNull
    @Size(min = 1, max = 45)
    @Column(name = "nazwisko")
    private String nazwisko;
    @Basic(optional = false)
    @NotNull
    @Size(min = 1, max = 11)
    @Column(name = "pesel")
    private String pesel;
客户端类:

@Entity
@DiscriminatorValue(value = "Klient")
public class Klient extends Osoba {

    @Size(max = 45)
    @Column(name = "telefon")
    private String telefon;
    @OneToMany(cascade = CascadeType.ALL, mappedBy = "osobyId")
    private Collection<Zamowienie> zamowienieCollection;
    @OneToOne(cascade = CascadeType.ALL, mappedBy = "klient")
    private Adres adres;
我有一个klientMB,它添加了人和地址

@ManagedBean
@RequestScoped
public class KlientMB {

    @EJB
    private KlientDaoLocal klientDao;
    private Klient klient;

    public KlientMB() {
    }

    public Klient getKlient() {
        if (klient == null) {
            klient = new Klient();
            Adres adres = new Adres();
            klient.setAdres(adres);
            adres.setOsoba(klient);
        }
        return klient;
    }

    public void setKlient(Klient klient) {
        this.klient = klient;
    }

    public String createKlient() {
        klientDao.create(klient);
        return "klienci.xhtml?faces-redirect=true";

    }
但是,当我尝试添加Klient时,出现以下错误:

javax.faces.el.EvaluationException:javax.ejb.EJBException 位于javax.faces.component.MethodBindingMethodExpressionAdapter.invoke(MethodBindingMethodExpressionAdapter.java:102) 位于com.sun.faces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:102) 在javax.faces.component.UICommand.broadcast(UICommand.java:315) 位于javax.faces.component.UIViewRoot.broadcastEvents(UIViewRoot.java:794) 位于javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:1259) 位于com.sun.faces.lifecycle.InvokeApplicationPhase.execute(InvokeApplicationPhase.java:81) 位于com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101) 在com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:118)上 位于javax.faces.webapp.FacesServlet.service(FacesServlet.java:593) 位于org.apache.catalina.core.StandardWrapper.service(StandardWrapper.java:1550) 位于org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:281) 位于org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175) 位于org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:655) 位于org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:595) 位于org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:161) 位于org.apache.catalina.connector.CoyoteAdapter.doService(CoyoteAdapter.java:331) 位于org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:231) 位于com.sun.enterprise.v3.services.impl.ContainerMapper$AdapterCallable.call(ContainerMapper.java:317) 位于com.sun.enterprise.v3.services.impl.ContainerMapper.service(ContainerMapper.java:195) 位于com.sun.grizzly.http.ProcessorTask.InvokeApter(ProcessorTask.java:860) 在com.sun.grizzly.http.ProcessorTask.doProcess(ProcessorTask.java:757) 位于com.sun.grizzly.http.ProcessorTask.process(ProcessorTask.java:1056) 位于com.sun.grizzly.http.DefaultProtocolFilter.execute(DefaultProtocolFilter.java:229) 位于com.sun.grizzly.DefaultProtocolChain.executeProtocolFilter(DefaultProtocolChain.java:137) 在com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:104)上 在com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:90)上 http.HttpProtocolChain.execute(HttpProtocolChain.java:79) 位于com.sun.grizzly.ProtocolChainContextTask.doCall(ProtocolChainContextTask.java:54) 在com.sun.grizzly.SelectionKeyContextTask.call上(SelectionKeyContextTask.java:59) 位于com.sun.grizzly.ContextTask.run(ContextTask.java:71) 位于com.sun.grizzly.util.AbstractThreadPool$Worker.doWork(AbstractThreadPool.java:532) 位于com.sun.grizzly.util.AbstractThreadPool$Worker.run(AbstractThreadPool.java:513) 运行(Thread.java:744) 原因:javax.ejb.EJBException 位于com.sun.ejb.containers.BaseContainer.processSystemException(BaseContainer.java:5215) 在com.sun.ejb.containers.BaseContainer.completeNewTx(BaseContainer.java:5113) 在com.sun.ejb.containers.BaseContainer.postInvokeTx上(BaseContainer.java:4901) 在com.sun.ejb.containers.BaseContainer.postInvoke(BaseContainer.java:2045)上 在com.sun.ejb.containers.BaseContainer.postInvoke上(BaseContainer.java:1994) 在com.sun.ejb.containers.ejblocationHandler.invoke(ejblocationHandler.java:222)上 在com.sun.ejb.containers.ejblocationHandlerDelegate.invoke(ejblocationHandlerDelegate.java:89)上 位于com.sun.proxy.$Proxy177.create(未知源) 位于pl.ear.mb.KlientMB.createKlient(KlientMB.java:45) 在sun.reflect.NativeMethodAccessorImpl.invoke0(本机方法)处 在sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)中 在sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)中 位于java.lang.reflect.Method.invoke(Method.java:606) 在javax.el.BeanELResolver.invokeMethod(BeanELResolver.java:779) 位于javax.el.BeanELResolver.invoke(BeanELResolver.java:528) 在javax.el.CompositeELResolver.invoke(CompositeELResolver.java:257) 位于com.sun.el.parser.AstValue.invoke(AstValue.java:248) 位于com.sun.el.MethodExpressionImpl.invoke(MethodExpressionImpl.java:302) 在com.sun.faces.facelets.el.TagMethodExpression.invoke(TagMethodExpression.java:105)上 位于javax.faces.component.MethodBindingMethodExpressionAdapter.invoke(MethodBindingMethodExpressionAdapter.java:88) ... 32多 原因:javax.persistence.EntityExistsException:org.hibernate.exception.ConstraintViolationException:无法插入:[pl.ear.model.Adres] 位于org.hibernate.ejb.AbstractEntityManagerImpl.throwPersistenceException(AbstractEntityManagerImpl.java:612) 位于org.hibernate.ejb.AbstractEntityManagerImpl.persist(AbstractEntityManagerImpl.java:226) 位于com.sun.enterprise.container.common.impl.EntityManagerRapper.persist(EntityManagerRapper.java:269) 创建(KlientDao.java:26) 在sun.reflect.NativeMethodAccessorImpl.invoke0(本机方法)处 在sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)中 在sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)中 位于java.lang.reflect.Method.invoke(Method.java:606) 位于org.glassfish.ejb.security.application.EJBSecurityManager.runMethod(EJBSecurityManager.java:1052) 位于org.glassfish.ejb.security.application.EJBSecurityManager.invoke(EJBSecurityM
@ManagedBean
@RequestScoped
public class KlientMB {

    @EJB
    private KlientDaoLocal klientDao;
    private Klient klient;

    public KlientMB() {
    }

    public Klient getKlient() {
        if (klient == null) {
            klient = new Klient();
            Adres adres = new Adres();
            klient.setAdres(adres);
            adres.setOsoba(klient);
        }
        return klient;
    }

    public void setKlient(Klient klient) {
        this.klient = klient;
    }

    public String createKlient() {
        klientDao.create(klient);
        return "klienci.xhtml?faces-redirect=true";

    }