首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何将多对多映射为嵌套嵌入式对象

如何将多对多映射为嵌套嵌入式对象
EN

Stack Overflow用户
提问于 2018-12-19 18:22:28
回答 1查看 99关注 0票数 0

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

代码语言:javascript
复制
@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
}

现在,根据可用的值,我们想要为这些值设置一个默认值,所以我们考虑如下内容:

代码语言:javascript
复制
@Entity
@Table(name = "CAR")
@Data
public class Car{
  @Id
  @Setter(NONE)
  Long id;

  String name;

  AvailableValues availableValues;
  DefaultValues defaultValues;
}

然后

代码语言:javascript
复制
@Embeddable
class AvailableValues{
  Set<Wheels> wheels;
  //...
}

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

但我不知道如何处理它的映射方面。defaultValues应该简单明了,通过将这些值添加到CAR表中,或者通过一对一关系而不是使用Embeddable,但不能为embeddable中的集合想出任何概念,因为它将使用现有的结构。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-12-20 03:49:06

我不确定我是否正确理解了这个问题,但是如果将关系映射移动到AvailableValues中,则DB模式将被保留

代码语言:javascript
复制
@Embeddable
@Data
class AvailableValues {
    @ManyToMany
    @JoinTable(name = "CAR_WHEELS",
            joinColumns = @JoinColumn(name = "CAR_FK"),
            inverseJoinColumns = @JoinColumn(name = "WHEEL_FK"))
    Set<Wheel> wheels;
}

或者,如果出于某种原因想要更改包含实体中的映射,则可以使用@AssociationOverride

代码语言:javascript
复制
@Embedded
@AssociationOverride(name = "wheels",
        joinTable = @JoinTable(name = "MY_CAR_WHEELS",
                joinColumns = @JoinColumn(name = "MY_CAR_FK"),
                inverseJoinColumns = @JoinColumn(name = "MY_WHEEL_FK")
        )
)
AvailableValues availableValues;
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53849148

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档