1

使用 Spring Data JPA 进行 Spring 启动。Postgres 数据库。

一般实体:

@Entity
@Table
class Entity {

@Id
@GeneratedValue
private int id;

}

当我尝试使用指定id值创建条目时,结果我看到它被忽略并由@GeneratedValue.

如何克服这一点?

4

1 回答 1

1

发布解决方案,我在对整个持久过程进行了调试之后(不是说这是正确的方法,但我确实没有找到任何“可能我配置错误”的地方):

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;

}
于 2020-04-03T07:56:41.300 回答