在这种情况下,我希望检索数据,但在返回数据之前,我希望在不保存/持久化的情况下对其进行更改。
这是我的Rest控制器:
@RestController
@RequestMapping("api/drawing-releases")
@CrossOrigin("*")
public class DrawingReleaseRestController {
@Autowired
private DrawingReleaseService service;
@RequestMapping(method = RequestMethod.GET, value = "/{id}")
@JsonView(View.DrawingReleaseView.class)
public ResponseEntity<DrawingRelease> getWithId(@PathVariable int id) throws EntityNotFoundException {
return new ResponseEntity<>(service.getByID(id),HttpStatus.OK);
}
}
以下是服务实现:
@Service
public class DrawingReleaseServiceImpl extends DrawingFunctions implements DrawingReleaseService {
/**
* Logging Manager
*/
private static final Logger LOGGER=LogManager.getLogger();
@Autowired
private DrawingReleaseRepository repository;
@Override
public DrawingRelease getByID(int id) throws EntityNotFoundException {
Optional<DrawingRelease> opt = repository.findById(id);
...
// manipulate the data here
...
return opt.get();
}
}
最初我在服务上有@Transactional
注释。通过删除它而不在getByID
方法中使用它,我首先想到的是会话将使用存储库打开和关闭,如这里的答案所示。
这不起作用,我在评论中看到“会话将持续整个HTTP请求处理过程。”所以,在我添加的服务中
@Autowired
private EntityManager em;
然后在我添加的getByID
方法中
em.close();
在我做任何改变之前。然而,我所做的任何更改仍在持续进行。
是否有任何方法可以在服务层中进行未保存的更改?我想我可以创建一些POJO来镜像实体(但不是实体),然后复制数据并返回那些对象,但我似乎不需要做这样的事情。
是的,您可以将实体从持久性上下文中分离出来:https://docs.oracle.com/javaee/7/api/javax/persistence/EntityManager.html#detach-java.lang.Object-
您说您希望获取一个实体,然后更改数据,然后返回它,而不保留该实体,但是您不应该为此使用该实体。既然数据不再代表数据库中的内容,为什么要更改数据以及用户将如何处理它。还将进行哪些其他更改,或者哪些其他假设(这是一个数据库对象)将无效?
如果您使用数据库对象来派生不同的对象,那么为此您应该有不同的类。这很常见,称为数据传输对象(DTO),可以使用投影直接从spring数据jpa创建它们。Dto对象将实体作为构造函数,并从实体中填充它想要的任何属性。Dto不是持久对象,因此在保存时不会出现任何问题。
设计更加清晰易懂,符合SOLID原则和代码结构。
我有一个批处理过程,它正在为一组实体重新计算数据。通过Hibernate从DB获取实体列表: 当流程运行时,某些实体似乎正在分离,导致两种症状: 当尝试获取惰性数据时,我得到一个异常: 在我的第一次尝试中,我试图通过调用inside
主要内容:JPA实体更新示例JPA允许我们通过更新实体来更改数据库中的记录。 JPA实体更新示例 在这里,我们将演示如何根据主键更新学生的年龄。 完整的项目代码如下所示 - 这个例子包含以下步骤 - 第1步: 在包下创建一个名为的实体类,它包含属性:,和。 文件:StudentEntity.java 的代码如下 - 第2步: 将实体类和其他数据库配置映射到文件中。 文件:persistence.xml 的代码如下 - 在包下
我有这样的Jpa存储库:
在Symfony 2(最新版本)下,我试图更新我的实体: 我得到了这个错误消息到我的终端: [Symfony\Component\Config\Definition\Exception\InvalidConfigurationException] 无法识别的选项“security.firewalls.access\u control”下的“0、1、2、3” 我是Symfony的新手,我不知道在哪里
我不敢相信其他人没有想到这一点,但我无法找到解决办法。 假设我有两种实体类型,A和B具有一对多的关系。A有一个B的集合。 对于Bs,A的表单有一个集合类型(CollectionType),对于B有一个自定义的条目类型(entry\u type),允许添加(allow\u add)和删除(allow\u delete)设置为真(true)。创建/填充/呈现表单时,Bs字段由其在集合中的索引标识。当表
我正在尝试更新我的用户实体,我想到了一个错误:错误:NULL值违反了“id”列的Not NULL约束详细信息:失败的行包含(null,1,1) 这个问题肯定源于我在用户和配置文件之间的关系,即n-n