我有两个不同的组件,它们使用两个不同的数据库,但实体位于两个数据库上,并且我希望它始终具有相同的 ID。
所以基本上当 ID 为空时我希望它自动生成,如果它不为空则使用 ID。
我正在使用休眠。
@Id
@Column(name = COLUMN_ID, unique = true, nullable = false)
@GeneratedValue(strategy = GenerationType.AUTO)
public Long getId() {
return id;
}
有什么建议么?
为此,您需要一个自定义序列生成器:
public class SetableSequenceGenerator extends SequenceStyleGenerator {
/**
* Custom id generation. If id is set on the
* com.curecomp.common.hibernate.api.Entity instance then use the set one,
* if id is 'null' or '0' then generate one.
*/
@Override
public Serializable generate(SharedSessionContractImplementor session, Object obj) {
if ((obj != null) && (obj instanceof Entity)) {
Entity<? extends Serializable> entity = (Entity<? extends Serializable>) obj;
if ((entity.getId() == null) || (entity.getId().equals(0))) {
return super.generate(session, obj);
}
return entity.getId();
}
return super.generate(session, obj);
}
}
作为策略,您指定序列生成器类的 FQN
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)