通常 Id 列如下所示,它工作得很好并且生成了序列值
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "idGenerator")
@SequenceGenerator(name = "idGenerator", sequenceName = "HIBERNATE_SEQUENCE", allocationSize = 50)
@Column(name = "ID")
public Long getId()
{ return mId; }
现在我想要的是,如果在程序中设置 xyz.setId(200) ,它应该将 Id 保存为 200,而不是由序列生成的 Id。现在我该如何实现这一目标?我还想使用这两个属性sequenceName =“HIBERNATE_SEQUENCE”,allocationSize = 50。
最后,经过一天的使用时间,我深入到罐子里,得到了解决方案。
我用了@GenericGenerator(name = "idGenerator", strategy = "com.jayash.domain.UseExistingOrGenerateIdGenerator")
public class UseExistingOrGenerateIdGenerator extends SequenceHiLoGenerator {
@Override
public Serializable generate(SessionImplementor session, Object object) throws HibernateException {
Serializable id = session.getEntityPersister(null, object).getClassMetadata().getIdentifier(object, session);
return id != null ? id : super.generate(session, object);
}
@Override
public void configure(Type type, Properties params, Dialect dialect) throws MappingException {
params.put(org.hibernate.id.SequenceGenerator.SEQUENCE, "HIBERNATE_SEQUENCE");
params.put(SequenceHiLoGenerator.MAX_LO, String.valueOf("49"));
super.configure(type, params, dialect);
}
}
Yipee 效果很好
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)