【问题标题】:Discriminator value is from another table鉴别器值来自另一个表
【发布时间】:2022-10-04 23:55:00
【问题描述】:

所以我对休眠很陌生,想知道是否有可能将鉴别器值放在另一个表中,所以我有 3 个名为 Vehicles、BikeLots 和 BikeTypes 的表。我想根据 BikeType 映射 Vehicle ,我的表格如下所示:

车辆(VehicleId、SerialNumber、BikeLotId、Point)

BikeLots(BikeLotId、DeliveryDate、BikeTypeId)

BikeTypes(BikeTypeId,BikeTypeDescription)

是否可以根据 BikeTypeId 将车辆映射为 Dock 或 Dockless? 目前我的课程看起来像这样

@Entity(name = "Vehicles")
@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
@DiscriminatorFormula("CASE ?")
public abstract class Vehicle {
  @Id
  @GeneratedValue(strategy = GenerationType.IDENTITY)
  @Getter
  @Setter
  private short vehicleId;

  @Column(columnDefinition = "nvarchar(50)")
  @Getter
  @Setter
  private String serialNumber;

  private Point point;

  @ManyToOne
  @JoinColumn(name = "BikeLotId")
  private Bikelot bikeLot;
}
@Entity
@DiscriminatorValue("Dockless")
public class DocklessVehicle extends Vehicle{
// valid code
}
@Entity
@DiscriminatorValue("Dock")
public class DockVehicle extends Vehicle {
}

如果还有什么我需要提供或澄清的,请告诉我,因为这是我在这里提出的第一个问题。

【问题讨论】:

    标签: java hibernate


    【解决方案1】:

    你可以尝试这样的事情,但我真的不建议你这样做,因为它不是很有效。

    @DiscriminatorFormula("case (select bikeLot.BikeTypeId from BikeLots bikeLot where bikeLot.BikeLotId = BikeLotId) when 1 then 'Dock' when 2 then 'Dockless' else null end")
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-11-20
      • 1970-01-01
      • 2019-04-01
      • 1970-01-01
      • 2020-01-30
      • 2013-06-16
      • 1970-01-01
      • 2011-11-19
      相关资源
      最近更新 更多