如何将许多嵌套对象映射为嵌套

时间:2018-12-19 10:22:28

标签: java jpa

我有一个字典结构,我们需要传递给前端。目前,它为一个下拉菜单提供不同的值,其余下拉菜单的可用值取决于第一个下拉菜单的选择

@Entity
@Table(name = "CAR")
@Data
public class Car{
  @Id
  @Setter(NONE)
  Long id;

  String name;

  @ManyToMany
  @JoinTable(name = "CAR_WHEELS",
        joinColumns = @JoinColumn(name = "CAR_FK"),
        inverseJoinColumns = @JoinColumn(name = "WHEEL_FK"))
  Set<Wheel> wheels;

  //some other similar sets
}

现在,在可用值旁边,我们希望为这些值提供默认值,因此我们正在考虑以下方法:

@Entity
@Table(name = "CAR")
@Data
public class Car{
  @Id
  @Setter(NONE)
  Long id;

  String name;

  AvailableValues availableValues;
  DefaultValues defaultValues;
}

然后

@Embeddable
class AvailableValues{
  Set<Wheels> wheels;
  //...
}

@Embeddable
class DefaultValues{
  Wheel wheel;
  //...
}

但是我不知道如何处理它的映射方面。 defaultValues应该简单明了,要么通过将这些值添加到CAR表中,要么通过一对一关系而不是使用Embeddable,但是对于可嵌入对象内部的集合没有任何想法,将使用已经存在的结构。

1 个答案:

答案 0 :(得分:1)

我不确定我是否正确理解了这个问题,但是如果将关系映射移到AvailableValues

中,则将保留数据库架构
@Embeddable
@Data
class AvailableValues {
    @ManyToMany
    @JoinTable(name = "CAR_WHEELS",
            joinColumns = @JoinColumn(name = "CAR_FK"),
            inverseJoinColumns = @JoinColumn(name = "WHEEL_FK"))
    Set<Wheel> wheels;
}

(可选)如果出于某种原因要更改包围实体中的映射,则可以使用@AssociationOverride

@Embedded
@AssociationOverride(name = "wheels",
        joinTable = @JoinTable(name = "MY_CAR_WHEELS",
                joinColumns = @JoinColumn(name = "MY_CAR_FK"),
                inverseJoinColumns = @JoinColumn(name = "MY_WHEEL_FK")
        )
)
AvailableValues availableValues;