HibernateはjobLifeTimeエンティティの既存のデータベースにテーブルを作成しましたが、0ではなく8781で始まる自動生成コードを最初に記録しました。このテーブルには、jobLifeTimeエンティティの前にDBに格納されている他のオブジェクト(scraperTask) scraperTaskレコードにコード8780が与えられています(これはscraperTaskのテーブルにはすでにレコードがいくつかあるためです)。Hibernate PostgreSQL自動インクリメントコードフィールドで何が混乱するのですか?
なぜhibernateがscraperTask.codeからjobLifeTime.codeのインクリメントカウントを使用するのですか?休止状態またはPostgreSQLは両方のテーブルの主キーの1つの数列を使用するように
更新 が見えます。これは正しい行動ですか?データベーステーブルから
ここでは、Javaクラスとスクリーンショット:
@Entity
@Table(name="job_chron_stg", indexes = { @Index(name = "job_life_time_code_hidx", columnList = "code"),
@Index(name = "job_life_time_job_id_hidx", columnList = "job_id")})
public class JobLifeTime {
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
private Long code;
@Column(name="job_id", length=24)
private String targetJobCode;
@ManyToOne()
private ScraperTask scraperTask;
@Column(name="salary_low")
private Integer salaryMin;
@Column(name="salary_high")
private Integer salaryMax;
@Column(name="scrape_timestamp")
private Date scrapeTimestamp;
@Column(name="remove_timestamp")
private Date removeTimestamp;
public JobLifeTime(){}
public JobLifeTime(Element node, ScraperTask scraperTask){
targetJobCode = node.attr("data-jk");
this.scraperTask = scraperTask;
salaryMin = scraperTask.getSalaryMin();
salaryMax = scraperTask.getSalaryMax();
scrapeTimestamp = new Date();
}
//getters-setters
}
scraperTaskクラス
@Entity
@Table(indexes = { @Index(name = "scraper_task_code_hidx", columnList = "code"),
@Index(name = "task_start_at_hidx", columnList = "task_start_at")})
public class ScraperTask {
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
private Long code;
@Column(name="task_start_at")
private Date taskStartAt;
private Date taskCompleteAt;
private String description;
@Transient
private Integer salaryMin;
@Transient
private Integer salaryMax;
//@Transient
private Integer websiteJobsNumber;
@Transient
private String firstResponse;
//@Transient
//private Integer processedNodes;
//@Transient
private Boolean doneSuccessfully;
@Transient
private List<JobLifeTime> scrapedJobLifeTimeList;
@Transient
private List<Job> scrapedJobList;
@Transient
private KeywordsEntity keywordsEntity;
@Transient
private String category;
protected ScraperTask(){
}
public ScraperTask(String uriString, Integer salaryMin, Integer salaryMax){
description = uriString;
taskStartAt = new Date();
this.salaryMin = salaryMin;
this.salaryMax = salaryMax;
websiteJobsNumber=0;
//processedNodes = 0;
doneSuccessfully = false;
scrapedJobLifeTimeList = new LinkedList<JobLifeTime>();
scrapedJobList = new LinkedList<Job>();
}
//getters-setters
}
使用GenerationType.IDENTITY with postgres –