我在Symfony2和两个关联实体中遇到了Doctrine2的问题.
有一个用户实体可以(不一定)有一个引用的usermeta实体,其中包含传记等信息.
usermeta是可选的,因为用户是由另一个系统导入的,而usermeta是在我的应用程序中管理的.
当然我想将两者保存在一起,以便保存用户必须创建或更新usermeta-entity.
两者都由名为aduserid的列连接(两个表中的名称相同).
我已经认识到,如果usermeta是一个可选引用,在这种情况下,拥有方应该是usermeta,否则doctrine会加载用户并需要usermeta实体 - 但它并不总是存在.
请注意User-> setMeta中的注释..
/**
* User
*
* @ORM\Table(name="user")
* @ORM\Entity
*/
class User
{
/**
* @var Usermeta
* @ORM\OneToOne(targetEntity="Usermeta", mappedBy="user", cascade={"persist"})
*/
protected $meta;
public function getMeta()
{
return $this->meta;
}
/**
*
* @param Usermeta $metaValue
*/
public function setMeta($metaValue)
{
// I've tried setting the join-column-value here
// - but it's not getting persisted
// $metaValue->setAduserid($this->getAduserid());
// Then I've tried to set the user-object in Usermeta - …Run Code Online (Sandbox Code Playgroud) 正如主题所暗示的那样,我在使用Hibernate和EhCache时遇到了一些麻烦.
我在Resteasy应用程序中使用Hibernate与mySql和EhCache.
模型:有一些实体,一些是一对多的,一些是一对一的关系.
问题:我试图在查询中获取所有数据createQuery("from Measuring c").list().现在有两种方法可以缓存结果:Querycache和2nd-level-cache.
querycache只会缓存测量实体的选择,不用说这不是我期望的行为.好吧,我希望querycache缓存所有的sql语句.有没有办法让这个工作?
我已经为所有实体激活了缓存.第二级缓存将缓存元素,但不会再次击中它们(确实如此,但只有测量元素); 稍后我意识到我必须缓存集合以让缓存知道哪些元素属于一起.
好吧,在将所有数据作为第一个缓存请求获取的情况下,激活所有一对多集合的缓存非常有效.但如果没有问题,我就不会写这个.通过其中一个字段查询某个地点作为第一个缓存操作将使缓存执行它应该执行的操作:它缓存所请求的数据,这意味着一个测量实体(实际上数据库中只有一个),一个标题信息,内容使用places-element和找到的地方及其子元素.查询另一个地方也很有效.现在我想获得所有元素(上面提到的查询),但我只得到已经查询过的元素.如果语句不包含选择标准,hibernate似乎只查询缓存.缓存集合时,这似乎是一个小问题.
所以我需要的是获取查询缓存以缓存所有语句,或者如果请求已经执行了具体的查询,则检索整个集合的第二级缓存.
我还必须提到,当检索一个具体的地方(或所有元素)时,我需要获得完整的测量元素(带有其标题信息等),因为休息服务在xml中回答而另一方需要得到具有所有可能节点的测量元件.
我可以想象,我的查询中有一些错误.所以这里有两个提到的查询:
获取所有数据: createQuery("from Measuring c").setCacheable(true).list()
获取具体位置的数据:createQuery("from Measuring measuringElement join fetch measuringElement.content contentElement join fetch contentElement.places placesElement join fetch placesElement.places placeElement WHERE placeElement.name = '" + name +"'").setCacheable(true).list().
有谁能够帮我?
许多人提前感谢并亲切的问候