当前位置: 首页 > 知识库问答 >
问题:

加载关联对象会导致错误

堵宏毅
2023-03-14

我有两个对象,分别是OsobaAdresa。它们都正确地映射了条令注释Osoba和Adresa是一对一的关联。

我可以使用实体管理器分别加载Osoba和Adresa。只要Osoba没有填充属性Adresa,它就可以正常工作。但当我用属性Adresa保存Osoba并试图从数据库检索对象时,抛出了一个错误。

这就是我试图获取对象Osoba的方式。数据库中id为13的Osoba包含指向Adresa表的id。

$osoba = $entityManager->find("Osoba", 13);

抛出的错误是

Fatal error: require(): Failed opening required 'C:\Users\xxx\AppData\Local\Temp\__CG__Adresa.php' (include_path='C:\xampp\php\PEAR') in C:\xampp\htdocs\vendor\doctrine\common\lib\Doctrine\Common\Proxy\AbstractProxyFactory.php on line 206

这是我的Osoba和Adresa实体。

<?php
declare(strict_types = 1);

require_once('Krajina.php');
require_once('Obec.php');
require_once ("BaseDAO.php");

use \Doctrine\ORM\Mapping as ORM;
/**
 * @ORM\Entity
 * @ORM\Table(name="mr_adresa")
 */
class Adresa extends BaseDAO
{

/**
 * @ORM\Column(type="string", name="orientacne_cislo")
*/
private $orientacneCislo;
/**
 * @ORM\Column(type="string")
 */
private $psc;
/**
 * @ORM\Column(type="string", name="supisne_cislo")
 */
private $supisneCislo;
/**
 * @ORM\Column(type="string")
 */
private $ulica;
/**
 * @ORM\OneToOne(targetEntity="Krajina")
 * @ORM\JoinColumn(name="krajina_id", referencedColumnName="id")
 */
private $m_Krajina;
/**
 * @ORM\OneToOne(targetEntity="Obec")
 * @ORM\JoinColumn(name="obec_id", referencedColumnName="id")
 */
private $m_Obec;

public function getOrientacneCislo(): string
{
    return $this->orientacneCislo;
}

public function setOrientacneCislo(string $orientacneCislo): void
{
    $this->orientacneCislo = $orientacneCislo;
}

public function getPsc(): string
{
    return $this->psc;
}

public function setPsc(string $psc): void
{
    $this->psc = $psc;
}

public function getSupisneCislo(): string
{
    return $this->supisneCislo;
}

public function setSupisneCislo(string $supisneCislo): void
{
    $this->supisneCislo = $supisneCislo;
}

public function getUlica(): string
{
    return $this->ulica;
}

public function setUlica(string $ulica): void
{
    $this->ulica = $ulica;
}

public function getMKrajina(): Krajina
{
    return $this->m_Krajina;
}

public function setMKrajina(Krajina $m_Krajina): void
{
    $this->m_Krajina = $m_Krajina;
}

public function getMObec(): Obec
{
    return $this->m_Obec;
}

public function setMObec(Obec $m_Obec): void
{
    $this->m_Obec = $m_Obec;
}

}

<?php
declare(strict_types = 1);

require_once('Krajina.php');
require_once('Pohlavie.php');
require_once('Adresa.php');
require_once ("BaseDAO.php");

use \Doctrine\ORM\Mapping as ORM;

/**
 * @ORM\Entity
 * @ORM\Table(name="mr_osoba")
*/
class Osoba extends BaseDAO
{

    /**
     * @ORM\Column(type="date", name="datum_narodenia")
     */
    private $datumNarodenia;
    /**
     * @ORM\Column(type="string")
     */
    private $email;
    /**
     * @ORM\Column(type="string", name="iban_dotacia")
     */
    private $ibanDotacia;
    /**
     * @ORM\Column(type="string", name="iban_sponzor")
     */
    private $ibanSponzor;
    /**
     * @ORM\Column(type="string")
    */
    private $meno;
    /**
     * --@ORM\Column(type="datetime", name="platnost_ku_datumu")
     */
//  private $platnostKuDatumu;
    /**
     * @ORM\Column
     */
    private $priezvisko;
    /**
     * @ORM\Column(name="rodne_cislo")
     */
    private $rodneCislo;
    /**
     * @ORM\OneToOne(targetEntity="Krajina")
     * @ORM\JoinColumn(name="krajina_id", referencedColumnName="id")
     */
    private $m_Krajina;
    /**
     * @ORM\Column(name="pohlavie", type="string")
     */
    private $m_Pohlavie;
    /**
     * @ORM\OneToOne(targetEntity="Krajina")
     * @ORM\JoinColumn(name="statna_prislusnost_id", referencedColumnName="id")
     */
    private $m_StatnaPrislusnost;
    /**
     * @ORM\OneToOne(targetEntity="Adresa")
     * @ORM\JoinColumn(name="dorucovacia_adresa_id", referencedColumnName="id")
     */
    private $m_DorucovaciaAdresa;
    /**
     * @ORM\OneToOne(targetEntity="Adresa")
     * @ORM\JoinColumn(name="trvale_bydlisko_id", referencedColumnName="id")
     */
    private $m_TrvaleBydlisko;

    public function getDatumNarodenia()
    {
        return $this->datumNarodenia;
    }

    public function setDatumNarodenia($datumNarodenia): void
    {
        $this->datumNarodenia = $datumNarodenia;
    }

    public function getEmail(): string
    {
        return $this->email;
    }

    public function setEmail(string $email): void
    {
        $this->email = $email;
    }

    public function getIbanDotacia(): string
    {
        return $this->ibanDotacia;
    }

    public function setIbanDotacia(string $ibanDotacia): void
    {
        $this->ibanDotacia = $ibanDotacia;
    }

    public function getIbanSponzor(): string
    {
        return $this->ibanSponzor;
    }

    public function setIbanSponzor(string $ibanSponzor): void
    {
        $this->ibanSponzor = $ibanSponzor;
    }

    public function getMeno(): string
    {
        return $this->meno;
    }

    public function setMeno(string $meno)
    {
        $this->meno = $meno;
    }

    public function getPlatnostKuDatumu(): DateTime
    {
        return $this->platnostKuDatumu;
    }

    public function setPlatnostKuDatumu(DateTime $platnostKuDatumu): void
    {
        $this->platnostKuDatumu = $platnostKuDatumu;
    }

    public function getPriezvisko(): string
    {
        return $this->priezvisko;
    }

    public function setPriezvisko(string $priezvisko): void
    {
        $this->priezvisko = $priezvisko;
    }

    public function getRodneCislo(): string
    {
        return $this->rodneCislo;
    }

    public function setRodneCislo(string $rodneCislo): void
    {
        $this->rodneCislo = $rodneCislo;
    }

    public function getMKrajina(): Krajina
    {
        return $this->m_Krajina;
    }

    public function setMKrajina(Krajina $m_Krajina): void
    {
        $this->m_Krajina = $m_Krajina;
    }

    public function getMPohlavie(): Pohlavie
    {
        return $this->m_Pohlavie;
    }

    public function setMPohlavie(Pohlavie $m_Pohlavie): void
    {
        $this->m_Pohlavie = $m_Pohlavie;
    }

    public function getMStatnaPrislusnost(): Krajina
    {
        return $this->m_StatnaPrislusnost;
    }

    public function setMStatnaPrislusnost(Krajina $m_StatnaPrislusnost): void
    {
        $this->m_StatnaPrislusnost = $m_StatnaPrislusnost;
    }

    public function getMDorucovaciaAdresa(): Adresa
    {
        return $this->m_DorucovaciaAdresa;
    }

    public function setMDorucovaciaAdresa(Adresa $m_Adresa): void
    {
        $this->m_DorucovaciaAdresa = $m_Adresa;
    }

    public function getMTrvaleBydlisko(): Adresa
    {
        return $this->m_TrvaleBydlisko;
    }

    public function setMTrvaleBydlisko(Adresa $m_TrvaleBydlisko): void
    {
        $this->m_TrvaleBydlisko = $m_TrvaleBydlisko;
    }

}

共有1个答案

暴博远
2023-03-14

好吧,我找到问题所在了。

条令通过条令自身生成的代理对象连接到数据库。在为条令创建配置时,有两个选项—将dev mode设置为true或false。当dev mode设置为false时,它不会每次生成代理,只生成一次。因此,您需要至少将dev mode设置为true一次,或者自己生成类,这在下面的回答中进行了解释:https://stackoverflow.com/a/20231349/1869111

 类似资料:
  • 错误: 2021-10-13 12:25:27.092ERROR 21016---[nio-8080-exec-3]o. a. c. c. C.[.[.[ /].[调度Servlet]: Servlet.service()用于servlet[调度Servlet]在路径[]抛出异常[处理程序调度失败;嵌套异常java.lang.StackOverflow Error],具有根本原因 堆栈跟踪(多次重

  • 我正在开发jira插件。当我尝试部署它时,我收到一个错误: 创建URL中定义了名为“userService”的bean时出错[bundle://205.0:1/com/softwareplant/tool/service/UserService.class]:通过构造函数实例化Bean失败;嵌套的例外是java。lang.LinkageError:加载程序约束冲突:解析方法“org.slf4j.i

  • 问题内容: 当我尝试使用Terminal中的命令使用python创建虚拟环境时,出现以下错误: 我不是第一个遇到类似错误的人-我尝试遵循此答案的建议并运行: 那没有帮助。也没有以超级用户身份运行commmand。 接下来我应该调查什么? 问题答案: 我有完全相同的错误消息。Continuum Analytics支持小组的Ray Donnelly提供了以下解决方案,为我解决了这个问题: 当您pip安

  • 问题内容: 因此,我有主类在运行时调用。在Secondary类中,在顶部的代码是。 如何在不引起堆栈溢出错误的情况下使用次要类中的所有方法和变量,反之亦然? 注意:它们不在构造函数中 问题答案: 您的Main类正在创建一个Secondary实例,在创建一个Main实例…,这会导致堆栈溢出错误。 我认为您只是希望对象之间能够相互引用,所以不要在构造函数中创建另一个类的新实例。将引用声明为实例变量,并

  • 我有一个奇怪的问题,我不认为这是正常的行为(至少我找不到任何关于它的提及,它似乎是不正确的)。这是我的关联映射: 当我获取一个节点实体使用: 条令也会加载相关的内容实体,没有明显的原因吗?我知道一对多的关系总是很紧张,但我不认为多对一关系是这样的吗? 我已经使用SQL logger准确地检查了正在发生的事情,我看到了对数据库的两个单独的查询。我没有在线听众或类似的东西。显式设置(默认设置)没有任何

  • 摘要:从正在运行的Java程序加载jar会导致由类间依赖(例如语句)引起的引起的。我如何绕过它? 更详细的问题是: 我试图通过自己的Java程序将jar文件(我们称之为“服务器”)以编程方式加载到Java虚拟机中(我们称之为“ServerAPI”),并使用扩展和其他一些技巧来修改服务器的行为并与之交互。ServerAPI依赖于服务器,但如果服务器不存在,ServerAPI仍然必须能够从网站上运行和