我有一个更新列值的方法,方法使用批注@来进行事务管理。
解释问题的示例代码:
@Transactional
public void methodName(List<SomeClass> listofObjects){
for(someObject sm : listOfObjects){
sm.setName(" lets Assume we are using some dynamic name here "); // assume old name was "stackoverflow" for every record
someClassRepository.saveAndFlush(sm);
}
// Now lets get the list records from DB, by using some native query which retrieves the data
// from a DB view, created by combining 3-4 tables and also have the
// table "SomeClass" ( used above ) and its
// column "Name"
List<ViewObjects> VO = someRepo.getRecords();
for(ViewObjects vo : VO){
sop(vo.getName()); // printing the dynamic names which we updated in above loop
}
}问题:
我使用saveAndFlush,以便将更新后的名称提交给数据库。但是在下一个循环中,当我从a视图(这是一个组合"SomeClass“并包含我们更新的列"NAME”)和其他一些表获得数据时。在my循环中,记录被打印为“堆栈溢出”。
我要我们插入的更新的动态名称。
我还尝试创建两种不同的方法,第一种是更新名称,第二种方法是为DB视图获取更新后的名称,但是我得到了相同的输出:。
@Transactional
public void firstMethod(List<SomeClass> listofObjects){
for(someObject sm : listOfObjects){
sm.setName(" lets Assume we are using some dynamic name here "); // assume old name was "stackoverflow" for every record
someClassRepository.saveAndFlush(sm);
}
}
@Transactional
public void SecondMethod(){
List<ViewObjects> VO = someRepo.getRecords();
for(ViewObjects vo : VO){
sop(vo.getName()); // printing the dynamic names which we updated in above loop
}
}SOME_CLASS存储库:
@Repository
public class SomeClassRepository extends JpaRepository<SomeClass, Long> {
}VIEW_OBJECT存储库:
@Repository
public class ViewObjectRepository extends JpaRepository<ViewObjects, Long> {
@Query(value="select * from VIEW_OBJECTS", nativeQuery = true)
List<ViewObjects> getRecord();
}需要输出:
我想得到更新的记录与更新的名称列。
发布于 2021-05-01 20:53:06
在您的示例中,SomeClass和ViewObjects是不同的JPA实体,它们被映射到不同的数据库表。
例如,如果ViewObjects映射到"VIEW_OBJECTS“表,而SomeClass映射到"SOME_CLASS”表,那么更新"SOME_CLASS“表当然与"VIEW_OBJECTS”表无关。
但是如果"VIEW_OBJECTS“不是一个表,而是一个视图,那么请提供关于数据库模式("SOME_CLASS”和"VIEW_OBJECTS")的更详细信息。另外,请提供SomeClass和ViewObjects实体的代码(包含所有JPA注释)。查看数据库属性文件也很好,因此我们可以看到您的jdbc属性、使用哪个数据库、使用哪个jpa提供程序和所有其他属性,这些属性可能与您的事务配置相关。
否则,以下更改应修复此问题:
@Repository
public class SomeClassRepository extends JpaRepository<SomeClass, Long> {
@Query(value="select * from SOME_CLASS", nativeQuery = true)
List<SomeClass> getRecord();
}第二种方法应该使用someClassRepository:
@Transactional
public void SecondMethod(){
List<SomeClass> VO = someClassRepository.getRecords();
for(SomeClass vo : VO){
sop(vo.getName()); // printing the dynamic names which we updated in above loop
}
}发布于 2021-05-02 18:28:41
您需要直接查看数据库,以了解问题所在。
的问题是什么。
https://stackoverflow.com/questions/67348431
复制相似问题