【问题标题】:jpa @manytoone creates composite primary key instead of @idjpa @manytoone 创建复合主键而不是 @id
【发布时间】:2014-09-29 10:42:59
【问题描述】:

我正在运行 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 上设置自动增量!

【问题讨论】:

  • 离题评论:一般的好习惯是不要用您的母语命名字段和类
  • 你的 jpa 实现是什么/
  • 我使用Spring sts实现Spring data jpa hibenate mysql
  • 而你使用 hbm2ddl.auto=true?
  • hibernate.hbm2ddl.auto=update

标签: java mysql spring jpa many-to-one


【解决方案1】:

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

【讨论】:

  • 删除它,删除表,保存类并重新启动服务器。不幸的是,同样的结果。
【解决方案2】:

您可以查看如何使用@JoinColumn 来解决您的问题。

【讨论】:

猜你喜欢
  • 2021-08-11
  • 1970-01-01
  • 1970-01-01
  • 2011-11-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多