使用 Spring Data JPA 进行 Spring 启动。Postgres 数据库。
一般实体:
@Entity
@Table
class Entity {
@Id
@GeneratedValue
private int id;
}
当我尝试使用指定id
值创建条目时,结果我看到它被忽略并由@GeneratedValue
.
如何克服这一点?
使用 Spring Data JPA 进行 Spring 启动。Postgres 数据库。
一般实体:
@Entity
@Table
class Entity {
@Id
@GeneratedValue
private int id;
}
当我尝试使用指定id
值创建条目时,结果我看到它被忽略并由@GeneratedValue
.
如何克服这一点?
发布解决方案,我在对整个持久过程进行了调试之后(不是说这是正确的方法,但我确实没有找到任何“可能我配置错误”的地方):
public class MyGenerator extends SequenceStyleGenerator {
@Override
public Serializable generate(SharedSessionContractImplementor session, Object object) throws HibernateException {
return Optional.of(object)
.filter(Entity.class::isInstance)
.map(Entity.class::cast)
.map(Entity::getId)
.filter(i -> i > 0)
.map(Serializable.class::cast)
.orElse(super.generate(session, object));
}
)
和实体:
@Entity
class Entity implements Serializable {
@GenericGenerator(name = "myGenerator", strategy = "org.a.b.c.generators.MyGenerator")
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "myGenerator")
private Integer id;
}