如何正确处理实体关系

时间:2018-03-10 20:29:48

标签: spring spring-mvc spring-boot spring-data

表[machines]包含由多个物理列名称引用的物理列名[machine_id]:[machine_id],[machineId]。

它的原因似乎是因为我的实体关系:

@Entity(name = "lineups")
public class Lineup {
  // ...
  private long machineId;

  @ManyToOne(..)
  private Machine machine;
  // ...
}

public class LineupDto {
  // ...
  private long machineId;
  // ...
}

但是,如果我注释掉属性machineId,一切都会按预期开始工作。但是,这意味着我的阵容DTO必须包含一个Machine对象,而不仅仅是machineId

我正在寻找一种方法,我可以让一个控制器接受Lineup json对象与machineIdMachine object,但无法使其工作。

但是现在如果我必须发表评论machineId,我就无法在Dto&之间轻松转换数据。实体。

我有办法同时拥有machineId和amp;机器属性?

1 个答案:

答案 0 :(得分:1)

我建议将注释移到方法而不是字段,并将machineId标记为@Transient,告诉hibernate忽略该特定属性而不是尝试持久化它。然后只需使getMachineId方法返回Machine对象的id。

@Entity(name = "lineups") 
public class Lineup {
  // ...
  private long machineId;
  private Machine machine;
  // ...
  @Transient
  public long getMachineId() {
      return machine.getId();
  }

  @ManyToOne(..)
  public Machine getMachine() {
      return machine;
  }
 }