【发布时间】:2019-06-03 05:07:37
【问题描述】:
我正在尝试在更新或保存之前运行一些代码。我在我的实体中有:
@Data
@EqualsAndHashCode(callSuper=false)
@Table(name="file_management", uniqueConstraints = { @UniqueConstraint(columnNames = {"name"})})
@Entity
public class FileManagement {
@Id
@GeneratedValue(strategy= GenerationType.IDENTITY)
private long id;
@Column(name="name")
private String name;
@Column(name = "SEARCH_STRING", length = 1000)
@Getter @Setter
private String searchString;
@PreUpdate
@PrePersist
void updateSearchString() {
final String fullSearchString = StringUtils.join(Arrays.asList(
name),
" ");
this.searchString = StringUtils.substring(fullSearchString, 0, 999);
}
}
我的 FileManagementRepository 中有:
@Transactional
@Modifying
@Query("UPDATE FileManagement SET name = :name WHERE id = :id")
public void updateFile(long id, String name);
@Transactional
@Modifying
@Query(value = "INSERT INTO file_management (name, filename, created_by, create_date, is_active, is_deleted) VALUES (:name, :filename, :createdBy, :createdDate, :isActive, :isDeleted)", nativeQuery = true)
public void createFileWithFilename(String name, String filename, String createdBy, Date createdDate, boolean isActive, boolean isDeleted);
在我的 FileManagementService.java 中
public void updateFileWithFilename(String id, String name) {
fileManagementRepository.updateFile(Long.parseLong(id), name);
}
public boolean createFileWithFilename(String name, String filename, String createdBy, Date createdDate, boolean isActive, boolean isDeleted) {
fileManagementRepository.createFileWithFilename(name, filename, createdBy, createdDate, isActive, isDeleted);
return true;
}
但问题是当我更新或插入新行时没有调用 updateSearchString() 方法。 search_string 列为 (null)
请帮忙。谢谢。
【问题讨论】:
-
您正在使用查询来执行不使用实体的更新。为什么?基本上,您使用 JPA 进行持久化,然后通过创建自己的查询来解决它。