我的PostgreSQL表具有类型的id bigserial,这意味着它们是在插入行时生成的(因此,INSERT语句中不提供id列的值).我很难<generator class="...">在XML映射文件中找到属性的正确值.
下面的代码是我发现的最接近Postgres的代码,但是SELECT nextval(...)在插入之前它仍然在序列上执行(并且在插入时明确包含id字段的值).我只是希望Hibernate根本不包含id字段值,允许Postgres完成自己生成值的工作.
<id name="id" column="id" type="java.lang.Long">
<generator class="sequence">
<param name="sequence">my_sequence_name</param>
</generator>
</id>
Run Code Online (Sandbox Code Playgroud) 使用MariaDB 10.2,可以为Datetime定义默认值,例如created和lastModified.
我应该如何以只读字段的形式访问此列?因为这些值应仅在数据库的控制之下,不应从代码中修改,但我希望在代码中对此属性进行读访问.
我的实体有一个mapOrder字段,我希望自动增加,如下所示:
@Entity
public class Map{
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Column(columnDefinition = "serial")
private Long mapOrder;
//.......
}
Run Code Online (Sandbox Code Playgroud)
生成的sql似乎很好:
CREATE TABLE map
(
id bigserial NOT NULL,
map_order serial NOT NULL,
...
)
Run Code Online (Sandbox Code Playgroud)
但是当我使用Spring Data JPA的存储库保存它时,如下所示:
Map m=new Map();
repo.save(m);
Run Code Online (Sandbox Code Playgroud)
会给我例外的:
Caused by: org.postgresql.util.PSQLException: ERROR: null value in column "map_order" violates not-null constraint
Run Code Online (Sandbox Code Playgroud)
有任何想法吗?