我的实体有一个mapOrder字段,我希望它自动递增,如下所示:
@Entity
public class Map{
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Column(columnDefinition = "serial")
private Long mapOrder;
//.......
}
生成的sql看起来不错:
CREATE TABLE map
(
id bigserial NOT NULL,
map_order serial NOT NULL,
...
)
但是当我用Spring Data JPA的存储库保存它时,就像这样:
Map m=new Map();
repo.save(m);
会给予我例外:
Caused by: org.postgresql.util.PSQLException: ERROR: null value in column "map_order" violates not-null constraint
有什么想法吗?
4条答案
按热度按时间fykwrbwg1#
请尝试将代码更改为:
参考:https://stackoverflow.com/a/29028369
wnvonmuf2#
@GeneratedValue
可与标识符一起使用,但不能与常规字段一起使用。例如,您可以使用序列的某个对象(使用任何密钥生成策略):
为了使用策略
GenerationType.SEQUENCE
,应在数据库中创建序列:这应该在键定义中指定。您还应该添加一个与对象的
one-to-one
关系,该对象将用于获取常规字段的序列:希望这对你有帮助。
x3naxklr3#
我遇到了同样的问题。在我的例子中,错误是在创建表时。
您需要使用
SERIAL
类型而不是其他类型(至少在Postgres中是这样)。之前(bigint类型)
之后(序列类型)
实体类中的id如下所示:
ohtdti5x4#
这个问题充满了不好的建议。问题是第二列有一个序列值。问题是Hibernate在那里显式地插入了一个null。你必须告诉它不要这样做。