jpa 如何手动设置@GeneratedValue的值

ykejflvf  于 8个月前  发布在  其他
关注(0)|答案(1)|浏览(76)

使用Spring Data JPA进行Sping Boot 。Postgres DB.
一般实体:

@Entity
@Table
class Entity {

@Id
@GeneratedValue
private int id;

}

当我尝试使用指定的id值创建一个条目时,结果我看到它被忽略并由@GeneratedValue生成。
如何克服这一点?

vlju58qv

vlju58qv1#

发布解决方案,我在对整个持久化过程进行调试后来到这里(并不是说这是正确的方法,但我确实没有发现任何“也许我配置错了”的地方):

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)
                .orElseGet(() -> 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;

}

相关问题