我正在运行 spring jpa 项目,我有以下包含@ManyToOne 关系的类:
package ba.fit.vms.pojo;
import java.io.Serializable;
import java.util.Date;
import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.Table;
import javax.validation.constraints.NotNull;
import org.springframework.format.annotation.DateTimeFormat;
@Entity
@Table(name="korisnik_vozilo")
public class KorisnikVozilo implements Serializable{
/**
*
*/
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
@Column(name="id")
private Long id;
@ManyToOne( cascade = {CascadeType.REFRESH}, fetch=FetchType.EAGER )
@JoinColumn(nullable=false, updatable=false)
private Vozilo vozilo;
@ManyToOne( cascade = {CascadeType.REFRESH}, fetch=FetchType.EAGER )
@JoinColumn(nullable=false, updatable=false)
private Korisnik korisnik;
@Column(name = "dodijeljeno")
@DateTimeFormat(pattern = "yyyy-MM-dd")
@NotNull
private Date dodijeljeno;
@Column(name = "vraceno")
@DateTimeFormat(pattern = "yyyy-MM-dd")
private Date vraceno;
...
}
出于某种原因,启动服务器时,此代码创建复合主键 (korisnik_id,vozilo_vin),而不是 @Id 定义的主键。这是表格的屏幕截图: 有人可以向我解释我做错了什么以及如何编写这段代码,这样我就不会在数据库中得到这个复合键,而是在类中定义的那个。
它甚至在 korisnik_id 上设置了自动增量!
最佳答案
尝试摆脱 updatable=false
。由于不可更新,这两列可能被视为实体的不可变标识。
关于java - jpa @manytoone 创建复合主键而不是 @id,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26098003/