Java JPA中实体序列生成器
我正试图用JPA在MySQL中创建一个顺序生成器字段,“prod_generator_id”必须以“1”开头。 例如: 这是我的java对象:Java JPA中实体序列生成器,java,mysql,jpa,Java,Mysql,Jpa,我正试图用JPA在MySQL中创建一个顺序生成器字段,“prod_generator_id”必须以“1”开头。 例如: 这是我的java对象: //this one is working fine, the id is unique... @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @Column(name = "pro_id") private Long id; //here is the problem, must st
//this one is working fine, the id is unique...
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "pro_id")
private Long id;
//here is the problem, must start in "1" by entity
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator="seq")
@SequenceGenerator(name="seq", sequenceName="pro_id_tenancy", initialValue=1, allocationSize=1)
@Column(name = "pro_id_tenancy")
private Long idTenancyProjeto;
我使用的是spring boot,但当我保存对象时,IDTenancProjeto将变为null
我找到的最简单的解决方案是:只需计算该公司的产品数量,然后在我的产品中添加+1即可。save()仅此而已。谢谢大家。据我所知,您希望该公司的所有产品编号为1到n 映射这一点的可能性取决于您使用的JPA提供商 为了在Hibernate中实现这一点(从4.3版开始),您可以将索引集合(通过
@OneToMany
)与@listinexbase
结合使用(请参阅)
示例代码:
@Entity
class Corporation {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "corp_id")
private Long id;
@OneToMany(mappedBy="corporation")
@OrderColumn(name="prod_generator_id")
@ListIndexBase(1)
private List<Product> products;
public List<Product> getProducts() {
return products;
}
public void setProducts(List<Product> products) {
this.products = products;
}
}
@Entity
class Product {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "prod_id")
private Long id;
@ManyToOne
@JoinColumn(
name = "corp_id",
referencedColumnName = "corp_id"
)
private Corporation corporation;
public Corporation getCorporation() {
return corporation;
}
public void setCorporation(Corporation corporation) {
this.corporation = corporation;
}
}
解决方案:
作为最简单的解决方案,我制作了另一个表,用于合计,在保存之前,我得到了值e add+1。检查我是否用更多信息更新了问题。为了使这个问题看起来完整,我希望至少有两个类声明(公司和产品)。此外,“保存对象”的代码示例也不错。也许您应该向OP提及这是什么
@listinexbase
,因为它不是JPA的一部分,因此应用程序是不可移植的。此外,OP没有说明使用了哪个JPA提供商,因此您必须具备一些先见之明。。。
@Entity
class Corporation {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "corp_id")
private Long id;
@OneToMany(mappedBy="corporation", cascade = CascadeType.ALL)
@OrderBy("prodGeneratorId")
private List<Product> products;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public List<Product> getProducts() {
return products;
}
public void setProducts(List<Product> products) {
this.products = products;
}
}
@Entity
class Product {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "prod_id")
private Long id;
@Column(name = "prod_generator_id")
private Integer prodGeneratorId;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
@ManyToOne
@JoinColumn(
name = "corp_id",
referencedColumnName = "corp_id"
)
private Corporation corporation;
public Corporation getCorporation() {
return corporation;
}
public void setCorporation(Corporation corporation) {
this.corporation = corporation;
}
public Integer getProdGeneratorId() {
return prodGeneratorId;
}
private void setProdGeneratorId(Integer prodGeneratorId) {
this.prodGeneratorId = prodGeneratorId;
}
@PrePersist
@PreUpdate
public void updateProdGeneratorId() {
setProdGeneratorId(getCorporation().getProducts().indexOf(this) + 1);
}
}