use*_*468 1 java spring hibernate jpa spring-data-jpa
我有以下JPA实体:
@EntityListeners(AuditingEntityListener.class)
@Entity
public class EntityWithAuditingDates {
@Id
@GeneratedValue
private Long id;
@Temporal(TemporalType.TIMESTAMP)
@CreatedDate
private Date createdDate;
@Temporal(TemporalType.TIMESTAMP)
@LastModifiedDate
private Date lastModified;
private String property;
// getters and setters omitted.
}
Run Code Online (Sandbox Code Playgroud)
以下CrudRepository:
@Service
public interface EntityWithAuditingDatesRepository extends CrudRepository<EntityWithAuditingDates, Long> {
}
Run Code Online (Sandbox Code Playgroud)
并进行以下测试:
@SpringApplicationConfiguration(classes = FooApp.class)
@RunWith(SpringJUnit4ClassRunner.class)
public class AuditingEntityListenerTest {
@Autowired
private EntityWithAuditingDatesRepository entityWithAuditingDatesRepository;
@Test
public void test() {
EntityWithAuditingDates entityWithAuditingDates = new EntityWithAuditingDates();
entityWithAuditingDates.setProperty("foo");
assertNull(entityWithAuditingDates.getCreatedDate());
assertNull(entityWithAuditingDates.getLastModified());
entityWithAuditingDatesRepository.save(entityWithAuditingDates);
assertNotNull(entityWithAuditingDates.getCreatedDate());
assertNotNull(entityWithAuditingDates.getLastModified());
assertEquals(entityWithAuditingDates.getLastModified(), entityWithAuditingDates.getCreatedDate());
entityWithAuditingDates.setProperty("foooo");
entityWithAuditingDatesRepository.save(entityWithAuditingDates);
assertNotEquals(entityWithAuditingDates.getCreatedDate(), entityWithAuditingDates.getLastModified());
}
}
Run Code Online (Sandbox Code Playgroud)
最后一个条件失败了.更新实体后,不应该是createdDate和lastModifiedDate不同?
谢谢!
小智 8
我遇到了同样的问题,但现在想出了一个解决方法.在@Column上,我设置了updatable = false以在更新时排除create*字段.
@CreatedBy
@NotNull
@Column(name = "created_by", nullable = false, length = 50, updatable = false)
private String createdBy;
@CreatedDate
@NotNull
@Column(name = "created_date", nullable = false, updatable = false)
private ZonedDateTime createdDate = ZonedDateTime.now();
@LastModifiedBy
@Column(name = "last_modified_by", length = 50)
private String lastModifiedBy;
@LastModifiedDate
@Column(name = "last_modified_date")
private ZonedDateTime lastModifiedDate = ZonedDateTime.now();
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4421 次 |
| 最近记录: |