【问题标题】:How to join 2 tables with different column name in spring tool suite with JPA?java - 如何使用JPA在spring工具套件中加入2个具有不同列名的表?
【发布时间】:2020-01-07 00:12:18
【问题描述】:

是否可以加入 2 个具有不同列名的表? 这里是技能模型类

@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;
}

这是我的技能水平模型

@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;
}

我尝试在技能模型中使用加入:

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

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

顺便说一下,x_skill_level 的主键在 x_skill 的外键中被命名为 Skill_level_id。 谢谢你:)

【问题讨论】:

  • 为什么每列都用这个注释:@GeneratedValue(strategy = GenerationType.IDENTITY)?
  • 对不起我不知道,我是新手,我只是使用我的教练的代码。
  • 我只是使用我的培训师提供的代码。。找一位新教练。

标签: java postgresql jpa spring-tool-suite


【解决方案1】:

您需要在第二个实体中添加@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;
   // ...
}

【讨论】:

  • 我试过这个,但后来我得到了这个错误:mappedBy reference an unknown target entity property: com.minipro207.model.SkillModel.skills 中的 com.minipro207.model.SkillModel.skm
  • @Shifa 我的错,你应该在SkillModel 类中有SkillLevelModel skm,在SkillLevelModel 类中有List&lt;SkillModel&gt; skills。我会更新答案
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-11-11
  • 1970-01-01
  • 1970-01-01
  • 2015-07-09
相关资源
最近更新 更多