Google协议缓冲区(3.0.0-beta2)提供了众所周知的Timestamp类型.
该文档使用System.currentTimeMillis()描述Java中的初始化,如下所示:
long millis = System.currentTimeMillis();
Timestamp timestamp = Timestamp.newBuilder().setSeconds(millis / 1000)
.setNanos((int) ((millis % 1000) * 1000000)).build();
Run Code Online (Sandbox Code Playgroud)
在最近的Java 8中有另一种方法吗?
将@Lock批注与@Modifying @Query和查询本身执行更新语句一起使用时,我遇到问题。我的测试设置如下:
经过测试的数据库:H2,PostgreSQL,MariaDB,Oracle
样本实体:
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.Table;
import javax.persistence.Version;
@Entity
@Table(name = "\"users\"")
public class User {
@Id
private Long id;
private boolean active;
@Version
@Column(nullable = false)
private long version = 0L;
// getters/setters (not shown)
}
Run Code Online (Sandbox Code Playgroud)
存储库如下所示:
import org.springframework.data.jpa.repository.Lock;
import org.springframework.data.jpa.repository.Modifying;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.CrudRepository;
public interface UserRepository extends CrudRepository<User, Long> {
@Modifying
@Query("UPDATE User u SET u.active …Run Code Online (Sandbox Code Playgroud) 我使用 Spring Data JPA(当前为 1.11.3.RELEASE)和 Hibernate(当前为 5.2.10.Final)作为 JPA 实现
我有以下场景作为(简化的)示例,首先是一个简单的 User 实体类:
@Entity
public class User {
@Id
private Long id;
private boolean active;
// getters/setters (not shown)
}
Run Code Online (Sandbox Code Playgroud)
具有基于 CRUD 的用户存储库。这个用户存储库应该提供方法来停用由其 id 标识的用户:
public interface UserRepository extends CrudRepository<User, Long> {
// deactivate single user
@Modifying
@Query("UPDATE User u SET active = false WHERE u.id = ?1")
void deactivate(Long id);
// TODO how to provide a deactivateAll method
}
Run Code Online (Sandbox Code Playgroud)
Spring Data JPA 文档中使用@Query 的修改形式很好地描述了该解决方案。
我在文档中错过的是如何提供 ids 列表作为 …
对于映射到具有 UUID的实体的H2 数据库架构,Hibernate ddl 验证失败并出现异常:
根本原因:org.hibernate.tool.schema.spi.SchemaManagementException:架构验证:在表 [ 中的 [testuuid] 列中遇到错误的列类型
TEST。dummy]; 找到 [varbinary (Types#VARBINARY)],但期待 [binary (Types#BINARY)]
设置:
进一步的休眠设置:
H2 DDL 最初是用休眠生成的,导致UUID在 H2 数据库模式中由“二进制”表示。
禁用验证有效,但不是一个选项。
我该如何解决这个问题?
该类CompletableFuture允许添加在调用后未来完成时调用的操作complete(...).
我可以使用whenComplete(...)来添加多个BiConsumer动作完成以后,并且当所有的人都在执行时执行complete(...)方法被调用?