我正在使用 Hibernate 5.3.7 。将hibernate.id.new_generator_mappings
的默认值从true设置为false后,将解决唯一性约束错误。
但是面对ID创建的另一种行为:
Hibernate生成的ID =(50 *(Oracle序列的start_with)值)+ 1
这是Hilo算法的默认行为吗?
谢谢。
建议的方法-https://hibernate.atlassian.net/browse/HHH-10983
Hi- Lo:https://vladmihalcea.com/the-hilo-algorithm/
我可以读取hat hi和lo值, [(hi -1)* crementSize)+ 1,(hi * incrementSize)) 默认情况下,incrementSize为50。
将start_with值乘以50的原因是什么?
例如:
我有一个表的序列起始值为5000
然后我的Hibernate应用程序将从(5000 * 50)= 250000开始
合并策略-以唯一约束例外结束
还有:如何在使用的id上传达Oracle序列?
根据该网站,id的缺口是正常的:
https://asktom.oracle.com/pls/apex/f?p=100:11:0::::P11_QUESTION_ID:369390500346406705
答案 0 :(得分:1)
解决方案:
public class CustomProgressbar extends RelativeLayout {
private TextView titleText;
private TextView valueText;
private ProgressBar progressBar;
public CustomProgressbar(Context context, AttributeSet attrs) {
super(context, attrs);
init(context, attrs);
}
private void init(Context context, AttributeSet attrs) {
inflate(context, R.layout.custom_progressbar_layout, this);
TypedArray typedArray = context.obtainStyledAttributes(attrs, R.styleable.CustomProgressbar);
CharSequence title = typedArray.getText(R.styleable.CustomProgressbar_title);
CharSequence value = typedArray.getText(R.styleable.CustomProgressbar_value);
int progress = typedArray.getInteger(R.styleable.CustomProgressbar_progress, 0);
typedArray.recycle();
titleText = findViewById(R.id.title_text);
valueText = findViewById(R.id.value_text);
progressBar = findViewById(R.id.progressbar_attr);
setTitleText(title);
setValueText(value);
setProgressBar(progress);
}
public CharSequence getTitleText() {
return titleText.getText();
}
public CharSequence getValueText() {
return valueText.getText();
}
public int getProgressBar() {
return progressBar.getProgress();
}
public void setTitleText(CharSequence value) {
titleText.setText(value);
}
public void setValueText(CharSequence value) {
valueText.setText(value);
}
public void setProgressBar(int value) {
progressBar.setProgress(value);
}
收到如下警告:
发现使用了不推荐使用的基于序列的[org.hibernate.id.SequenceHiLoGenerator] ID生成器;请改用org.hibernate.id.enhanced.SequenceStyleGenerator。有关详细信息,请参见《 Hibernate域模型映射指南》。
然后将我的代码更改为SequenceStyleGenerator:
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = SEQUENCE)
@SequenceGenerator(name = SEQUENCE, sequenceName = SEQUENCE)
private Long titId;
这解决了我的两个问题:
1)已弃用的警告已修复2)现在,根据oracle序列生成了id。