- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个有效的 SQL 查询,它从 SQL 命令行返回行,但通过 Doctrine 提交时则不会。我认为问题在于我如何设置ResultSetMapper
。我读过docs关于 native 查询,但我一定错过了一些东西。它是什么?
从 SQL 命令行运行以下查询会生成 1 行:
SELECT t.*
FROM
StateLogItem s NATURAL JOIN (
SELECT
task_id,
MAX(
COALESCE(updatedAt, createdAt)
) d,
MAX(id) id
FROM
StateLogItem
WHERE
dtype = 'transitionlogitem'
GROUP BY
task_id
) m
RIGHT JOIN Task t ON t.id = s.task_id
WHERE s.toState = 'started';
'20', 1, NULL, 'just because', '2014-07-18 10:49:00', NULL
ResultSetMapping
当我尝试通过 Symfony EntityRepository 中的 Doctrine 运行相同的查询时(如下所示),即使 Symfony 探查器指示正确的查询已成功运行,我也得到零行。
public function findByActionStatus($status){
$sql = "SELECT t.id, t.description, t.created_by, t.updated_by, t.createdAt, t.updatedAt
FROM StateLogItem s
NATURAL JOIN (
SELECT task_id, MAX(COALESCE(updatedAt,createdAt)) d, MAX(id) id
FROM StateLogItem
WHERE dtype = 'transitionlogitem'
GROUP BY task_id
) m
RIGHT JOIN Task t ON t.id=s.task_id
WHERE s.toState = :status";
$em = $this->getEntityManager();
$rsm = new ResultSetMapping();
$rsm->addEntityResult('ACCQueueBundle:Task', 't');
$rsm->addFieldResult('t','t.id','id');
$rsm->addFieldResult('t','t.created_by','createdBy');
$rsm->addFieldResult('t','t.updated_by','updatedBy');
$rsm->addFieldResult('t','t.description','description');
$rsm->addFieldResult('t','t.createdAt','createdAt');
$rsm->addFieldResult('t','t.updatedAt','updatedAt');
$rsm->addJoinedEntityResult('ACCQueueBundle:TransitionLogItem','s','t','transitions'); //tried with and without
$query = $em->createNativeQuery($sql,$rsm);
$query->setParameter('status', $status);
return $query->getResult();
}
Task
实体如下所示:
namespace ACC\QueueBundle\Entity;
use Doctrine\ORM\Mapping as ORM;
use Symfony\Component\Validator\Constraints as Assert;
use Doctrine\Common\Collections\ArrayCollection;
use ACC\Traits\BlameableTrait;
use ACC\MainBundle\Entity\Traits\HasDocumentsTrait;
use Gedmo\Mapping\Annotation as Gedmo;
use Gedmo\Timestampable\Traits\TimestampableEntity;
/**
* Task
* @ORM\Entity(repositoryClass="ACC\QueueBundle\Entity\TaskRepository")
* @ORM\HasLifecycleCallbacks()
*
*/
class Task {
use HasDocumentsTrait;
use BlameableTrait;
use TimestampableEntity;
/**
* @var integer
*
* @ORM\Column(name="id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
protected $id;
/**
* @var Transition
*
* @ORM\OneToMany(targetEntity = "TransitionLogItem", mappedBy = "task", orphanRemoval = true, cascade = {"persist"})
* @ORM\OrderBy({"createdAt" = "ASC"})
*/
protected $transitions;
/**
* @var Pause
*
* @ORM\OneToMany(targetEntity = "PauseLogItem", mappedBy = "task", orphanRemoval = true, cascade = {"persist"})
* @ORM\OrderBy({"createdAt" = "ASC"})
*/
protected $pauses;
/**
* @var string
*
* @ORM\Column(name="description", type="text")
*/
protected $description;
/**
* @ORM\ManyToMany(targetEntity = "ACC\MainBundle\Entity\Document", cascade={"persist","remove"})
* @ORM\JoinTable(name="Task_Document",
* joinColumns={@ORM\JoinColumn(name="task_id", referencedColumnName="id")},
* inverseJoinColumns={@ORM\JoinColumn(name="document_id", referencedColumnName="id", unique=true)})
*/
protected $documents;
//etc.
最佳答案
好吧,我发现了问题。这是由于 ResultSetMapping
不理解我给它的查询字段名称引起的,因为我包含了表前缀。所以我可以不包含表前缀,
即将 $rsm->addFieldResult('t','t.id','id');
更改为 $rsm->addFieldResult('t','id','id' );
或者我可以为所有字段添加别名:
即将 SELECT t.id, t.description...
更改为 SELECT t.id AS t_id, t.description AS t_description...
关于symfony - 教义 createNativeQuery 不返回结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24890930/
我有以下内容,其中包含一个 NativeQuery,我需要在其中设置参数,但有些事情是错误的,因为未设置参数,因此查询是 SELECT movieId, title, genres FROM movi
我有一个使用 EntityManager.createNativeQuery 的应用程序。我们的质量门(Sonar)对此不太满意,并且由于 SQL 注入(inject)的风险而向我显示了一个严重错误。
EntityManager em = OpenJPAUtils.openEntityManager(); String sql="select DISTINCT student.studentId f
如何使用 createNativeQuery 编写 IN 子句? 示例 codeList = "123 ,456"; 然后我得到这样的codeList: CODE IN (:codeList) 但是我
tl;博士 我有一个有效的 SQL 查询,它从 SQL 命令行返回行,但通过 Doctrine 提交时则不会。我认为问题在于我如何设置ResultSetMapper。我读过docs关于 native
我正在使用以下代码通过 hibernate 执行 native SQL 查询: Query zonesQuery = session.createNativeQuery( "S
我在我的项目中使用 Hibernate 和 JPA。我使用下面的代码返回对象列表,但当我在 mysql 中使用 sql 时它返回空列表,它工作正常。 Query query=entityManager
我在 Hibernate 中有一个简单的查找方法: @Override public TblUser findByUsername(String username) { return (Tbl
我正在尝试使用 createNativeQuery 从数据库获取结果集并将其映射到实体对象列表。 当我这样做的时候 List results = this.em.createNativeQuery(q
我需要使用entityManager选择 native 查询。我找到了方法: public Query createNativeQuery(String sqlString, Class result
我尝试使用 Doctrine 选择一百万行,但遇到了一些问题。 首先我尝试使用 ORM 查询来完成此操作,但后来我发现 native 查询更快。(我不需要为此使用 ORM 映射)。 我已经在使用数组水
我在数据库中加入了 2 个具有外键关系的实体,但在代码中没有(将原因留到另一个问题): em.createNativeQuery("SELECT u.* FROM user u JOIN user_c
我们最近将一个项目从使用 Hibernate 4 更新为 Hibernate 5.2,随之而来的是需要更新我们所有的标准以使用 JPA。大多数情况下一切正常,但我有一个查询不再运行。我们正在查询的表上
我想根据一个字段(类型)的值从两个不同的表中检索数据。基本上,如果类型是 2 或 3,则将“subcategory_id”分别关联到类别 2 或类别 3 普通 SQL: SELECT s.id, s.
在 PostgreSQL 数据库中执行的查询正在正确获取记录。但是,当使用 createnativeQuery 实现时,我收到错误 错误 SqlExceptionHelper:131 - 错误:“:”
我想在 entityManager 中使用 createNativeQuery 运行一个 Update 查询。我无法运行它。 我的类(class)结构: class ABC_DAO { List =
使用Java, hibernate 。 我有一个查询 String pixIds = "1,2,3"; String query = "SELECT * FROM comment WHERE PIX_
createNamedNativeQuery 和 createNativeQuery 之间是否有任何与性能相关的特性,因为我们计划对 HQL 查询使用命名查询,并为原生 SQL 查询维护单独的查询文件
EclipseLink 的奇怪行为(Eclipse Persistence Services - 2.1.1.v20100817-r8050),我有一个 false(虚拟/不是数据库中的实际表)实体类
乍一看我有一个简单的问题: entityManager() .createNativeQuery("select count(*) as total, select sum(field) as tot
我是一名优秀的程序员,十分优秀!