简体   繁体   English

如何使用 JPA 在 spring 工具套件中加入具有不同列名的 2 个表?

[英]How to join 2 tables with different column name in spring tool suite with JPA?

Is it possible to join 2 table with different column name?是否可以加入具有不同列名的 2 个表? Here is skillmodel class这是技能模型课

@Entity
@Table(name = "x_skill")
public class skillModel {
    @Id
    @Column(name="id")
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private long id;
    @Column(name="biodata_id")
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private long biodataId;
    @Column(name="skill_name")
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private String skillName;
    @Column(name="skill_level_id")
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private long skillLevelId;
    @Column(name="is_delete")
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private boolean isDelete;
}

and this is my skilllevelmodel这是我的技能等级模型

@Entity
@Table(name = "x_skill_level")
public class SkillLevelModel {
    private static final String ALL = null;
    @Id
    @Column(name="id")
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private long id;
    @Column(name="created_by")
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private long createdBy;
    @Column(name="created_on")
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Timestamp createdOn;
    @Column(name="modified_by")
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private long modifiedBy;
    @Column(name="modified_on")
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Timestamp modifiedOn;
    @Column(name="deleted_by")
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private long deletedBy;
    @Column(name="deleted_on")
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Timestamp deletedOn;
    @Column(name="is_delete")
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private boolean isDelete;
    @Column(name="name")
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private String name;
    @Column(name="description")
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private String description;
}

I tried to use join in skillmodel using :我尝试在技能模型中使用 join 使用:

@ManyToOne
@JoinColumn(name="skill_level_id", referencedColumnName="id", nullable=true, updatable=false, insertable=false)
private SkillModel skm;

but I got java.lang.IllegalArgumentException: Can not set long field com.minipro207.model.SkillModel.deletedBy to null value.但我得到java.lang.IllegalArgumentException: Can not set long field com.minipro207.model.SkillModel.deletedBy to null value.

by the way the primary key from x_skill_level is named skill_level_id in x_skill's foreign key.顺便说一下,来自 x_skill_level 的主键在 x_skill 的外键中被命名为 Skill_level_id。 Thank You :)谢谢你 :)

You need to add a @OneToMany in your 2nd entity like so :您需要在第二个实体中添加@OneToMany ,如下所示:

@Entity
@Table(name = "x_skill_level")
public class SkillLevelModel {
   // ...
   @OneToMany(mappedBy="skm", fetch=FetchType.LAZY)
   private List<SkillModel> skills;
   // ...
}

@Entity
@Table(name = "x_skill")
public class SkillModel {
   // ...
   @ManyToOne
   @JoinColumn(name="skill_level_id", referencedColumnName="id", nullable=true, updatable=false, insertable=false)
   private SkillLevelModel skm;
   // ...
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM