java - jpa @manytoone 创建复合主键而不是 @id

标签 java mysql spring jpa many-to-one

我正在运行 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 定义的主键。这是表格的屏幕截图:table view 有人可以向我解释我做错了什么以及如何编写这段代码,这样我就不会在数据库中得到这个复合键,而是在类中定义的那个。

它甚至在 korisnik_id 上设置了自动增量!

最佳答案

尝试摆脱 updatable=false。由于不可更新,这两列可能被视为实体的不可变标识。

关于java - jpa @manytoone 创建复合主键而不是 @id,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26098003/

相关文章:

java - Thread.sleep() 的精确替代方案

java - 在 Java 的 AS7(和 JBPM 6.2)中使用的正确事务管理器是什么?

mysql - sql日期如果不指定时间将默认引用00 :00:00 or 23:59:59

javafx - 对话框关闭时取消任务

java - 格式化正则表达式的问题

php - UTF-8贯穿始终

c# - 带有 Mysql 和 NullReferenceException 的 Entity Framework 6

java - Spring Boot使用jpa sql和pageable

java - Hibernate 4 复合 id NonUniqueObjectException

spring - 缓存最佳实践 java