我正在运行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上设置自动增量!
答案 0 :(得分:1)
尝试摆脱updatable=false
。在不可更新的情况下,这两列可能被视为实体的不可变身份。
答案 1 :(得分:0)
您可以查看如何使用@JoinColumn
解决问题。