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

Hibernate JPA更新数据

秦宜修
2023-03-14
public class User implements Serializable {
  private static final long serialVersionUID = 1L;

  @Id
  @SequenceGenerator(name = "seqUser", sequenceName = "seqUser")
  @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "seqUser")
  private Integer id;

  private String email;

  @OneToMany(mappedBy = "user", cascade = CascadeType.ALL, fetch = FetchType.LAZY)
  private List<UserProfile> userProfiles = new ArrayList<UserProfile>();

}

 public class Profile implements Serializable {
      private static final long serialVersionUID = 1L;

      @Id
      @SequenceGenerator(name="seqProfile", sequenceName ="seqProfile")
      @GeneratedValue(strategy=GenerationType.SEQUENCE, generator="seqProfile")
      private Integer id;

      private String codeProfile;

      private String libelleProfile;

      @OneToMany(mappedBy="profile", cascade = CascadeType.ALL,  fetch = FetchType.LAZY)
      @JsonIgnore
      private List<UserProfile> userProfiles = new ArrayList<UserProfile>();
    }

 public class UserProfile implements Serializable {
      private static final long serialVersionUID = 1L;

      @Id
      @SequenceGenerator(name = "seqUserProfile", sequenceName = "seqUserProfile")
      @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "seqUserProfile")
      private Integer id;

      @ManyToOne
      @JoinColumn(name = "idUser")
      @JsonIgnore
      private User user;

      @ManyToOne
      @JoinColumn(name = "idProfile")
      private Profile profile;
    }

我的存储库:

public interface IUserRepository extends JpaRepository<User, Integer>{
  User findByEmail(String email);
}
@Service
public class UserServiceImpl implements IUserService{
    @Autowired
    private IUserRepository userRepository;

    public User getUserByEmail(String email) {

        return userRepository.findByEmail(email);
    }

    public void updateUser(User user) {
        userRepository.save(user);
    }

}
@RestController
public class UserController {
    @Autowired
    private IUserService userService;

    @PutMapping(value="/user/{id}", consumes=MediaType.APPLICATION_JSON_VALUE)
    public ResponseEntity<?> updateUser(
            @PathVariable(value="id", required = true) Integer id,
            @RequestBody User user) {           

        userService.updateUser(user);

        return new ResponseEntity<User>(HttpStatus.NO_CONTENT);
    }
}
{
    "id": 1,
    "email": "email",
    "userProfiles": [
        {
            "profile": {
                "id": 1,
                "codeProfile": "ADMIN",
                "libelleProfile": "Administrateur",
            }
        },
        {
            "profile": {
                "id": 2,
                "codeProfile": "PROFILE2",
                "libelleProfile": "Profile 2",
            }
        }
    ]
}

共有1个答案

阎德业
2023-03-14

你用的是什么数据库?这个数据库支持序列吗?

但除此之外,@SequenceGenerator中缺少sequenceName属性:

@Id
@SequenceGenerator(name = "seq_user", sequenceName = "seq_user")
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "seq_user")
private Integer id;

此sequenceName必须是数据库中序列的名称。

@Service
public class UserServiceImpl implements IUserService{
    @Autowired
    private IUserRepository userRepository;

    public User getUserByEmail(String email) {

        return userRepository.findByEmail(email);
    }

    public void updateUser(User user) {
        for (UserProfile profile : user.getUserProfiles()) {
          profile.setUser(user);
        }
        userRepository.save(user);
    }
}
 类似资料:
  • 我想知道ehcache是否有办法检测数据库更新/插入(spring/java,hibernate web应用程序),并使用数据库中的当前(最新)数据刷新其缓存。如果没有,检测数据库更新的最佳方法是什么,以保持与缓存和数据库之间的数据同步?

  • 概述 使用update()方法更新文档。这个方法接收以下参数: 一个方档匹配的过滤器,用于过滤要更新的文档 一个用来执行修改操作的更新文档 一个可选的参数 指定过滤器和指定查询的时候是一样的。update()方法默认只更新单个文档,使用multi可选参数指定更新所有匹配的文档。 不能更新文档的_id字段。 更新指定字段 要改变某个字段的值,MongoDB提供了更新操作,比如$set用来修改值。如果

  • 更新数据使用Update方法,Update方法的第一个参数为需要更新的内容,可以为一个结构体指针或者一个Map[string]interface{}类型。当传入的为结构体指针时,只有非空和0的field才会被作为更新的字段。当传入的为Map类型时,key为数据库Column的名字,value为要更新的内容。 Update方法将返回两个参数,第一个为 更新的记录数,需要注意的是 SQLITE 数据库

  • 查找并更新 在取出数据后,更改字段内容后更新数据。 $user = UserModel::get(1); $user->user_nickname = '老猫'; $user->user_email = 'genmaowan@163.com'; $user->save(); 直接更新数据 也可以直接带更新条件来更新数据 $user = new UserMode

  • 更新数据表中的数据 Db::name('user') ->where('id', 1) ->update(['user_nickname' => '老猫是家里最懒的猫']); 如果数据中包含主键,可以直接使用: Db::name('user') ->update(['user_nickname' => '老猫是家里最懒的猫', 'id' => 1]); update 方

  • 查找并更新 在取出数据后,更改字段内容后更新数据。 $user = UserModel::find(1); $user->user_nickname = '老猫'; $user->user_email = 'genmaowan@163.com'; $user->save(); 批量更新数据 可以使用saveAll方法批量更新数据,例如: $user = ne

  • 更新数据表中的数据 数据库操作使用 Db类封装方法,请事先在引入 Db类 use think\facade\Db; Db::name('user') ->where('id', 1) ->update(['user_nickname' => '老猫是家里最懒的猫']); 如果数据中包含主键,可以直接使用: Db::name('user') ->update(['user

  • 更新某一条记录 方法原型 : public function update($data, $id); 参数名称 参数类型 参数说明 $data array 要更新的数据 $id int OR string 要更新数据的主键 return bool 成功返回true,失败返回false 栗子 $data = array( 'name' => 'xiaoming', 'age' =>