Hibernate JPA 实体只想保留一列
Hibernate JPA Entity want to persisit only one column
请建议我一种更新 JPA 实体中一列的方法。
我的代码
@Entity
@Table(name = "my_table")
public class MyTable {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id", updatable = false)
private Integer id;
@Column(name = "name")
private String name;
@Column(name = "mobile")
private Integer mobile;
@Column(name = "address")
private String address;
@Column(name = "gender")
private String gender;
}
当我想更新我的实体时,它会更新所有列,但只想更新一列
MyTable myTable = myRepo.findMyTableById(1);
myTable.setName("ra");
repo.save();
在这种情况下查询打印
update Account set name=?, mobile=?, address=?, gender=? where id=?
但我只想更新一列值,为什么要更新所有列?
您可以在实体 class 中使用 @DynamicUpdate
注释。这将帮助您只更新一列
实际上,当我们在实体上使用 @DynamicUpdate
时,Hibernate 不会使用缓存的 SQL 语句进行更新。相反,它会在我们每次更新实体时生成一条 SQL 语句。此生成的 SQL 仅包含更改的列。
为了找出更改的列,Hibernate 需要跟踪当前实体的状态。因此,当我们更改实体的任何字段时,它会比较实体的当前状态和修改后的状态。
所以,我希望这会在您的控制台上打印出来。
update my_table set name=? where id=?
默认行为是当您更新 Hibernate 实体时,实体上的 所有 字段将在基础数据库记录中更新。请注意,这并没有错,假设用于更新列的值与最初读取的值相同。
如果您真的只想更新单个列,您可以为此创建一个 JPA 存储库方法,例如
@Modifying
@Query("update MyTable m set m.name = :name where m.id = :id")
void updateName(@Param("name") String name, @Param("id") Long id);
如果您检查上面生成的 SQL,它实际上只会更新一列。
请注意,在某些数据库中,对值未更改的列的更新实际上会被忽略、q.v。 .
请建议我一种更新 JPA 实体中一列的方法。 我的代码
@Entity
@Table(name = "my_table")
public class MyTable {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id", updatable = false)
private Integer id;
@Column(name = "name")
private String name;
@Column(name = "mobile")
private Integer mobile;
@Column(name = "address")
private String address;
@Column(name = "gender")
private String gender;
}
当我想更新我的实体时,它会更新所有列,但只想更新一列
MyTable myTable = myRepo.findMyTableById(1);
myTable.setName("ra");
repo.save();
在这种情况下查询打印
update Account set name=?, mobile=?, address=?, gender=? where id=?
但我只想更新一列值,为什么要更新所有列?
您可以在实体 class 中使用 @DynamicUpdate
注释。这将帮助您只更新一列
实际上,当我们在实体上使用 @DynamicUpdate
时,Hibernate 不会使用缓存的 SQL 语句进行更新。相反,它会在我们每次更新实体时生成一条 SQL 语句。此生成的 SQL 仅包含更改的列。
为了找出更改的列,Hibernate 需要跟踪当前实体的状态。因此,当我们更改实体的任何字段时,它会比较实体的当前状态和修改后的状态。 所以,我希望这会在您的控制台上打印出来。
update my_table set name=? where id=?
默认行为是当您更新 Hibernate 实体时,实体上的 所有 字段将在基础数据库记录中更新。请注意,这并没有错,假设用于更新列的值与最初读取的值相同。
如果您真的只想更新单个列,您可以为此创建一个 JPA 存储库方法,例如
@Modifying
@Query("update MyTable m set m.name = :name where m.id = :id")
void updateName(@Param("name") String name, @Param("id") Long id);
如果您检查上面生成的 SQL,它实际上只会更新一列。
请注意,在某些数据库中,对值未更改的列的更新实际上会被忽略、q.v。