【问题标题】:Can't build a relationship Many-To-Many无法建立多对多关系
【发布时间】:2020-11-13 09:22:44
【问题描述】:

有两个实体:InventoryList 和 Parameter。

@Data
@NoArgsConstructor
@EqualsAndHashCode(callSuper = true)
@Entity
@Table(name = "parameters")
public class ParameterEntity extends Parameter {

@ManyToMany(mappedBy = "parameters")
private Set<UUID> inventoryLists;


}

@Getter
@Setter
@NoArgsConstructor
@AllArgsConstructor
@EqualsAndHashCode(callSuper = true)
name = "lists"
public class InventoryListEntity extends InventoryList {

@ManyToMany(cascade = CascadeType.PERSIST)
@JoinTable(
    name = "list_parameters",
    joinColumns = @JoinColumn(name = "il_id"),
    inverseJoinColumns = @JoinColumn(name = "parameter_id")
)
private Set<UUID> parameters;

}

有以下问题

 Many To Many attribute value type should not be UUID

但出于性能原因,我的任务是这样做。

这种情况有什么解决办法???

【问题讨论】:

    标签: java hibernate jpa many-to-many


    【解决方案1】:
    1. @ManyToMany 关联中的集合中的项目只能是其他实体。所以,在这种情况下,你只能有这样的东西:
    @Entity
    @Table(name = "parameters")
    public class ParameterEntity extends Parameter {
    
       @ManyToMany(mappedBy = "parameters")
       private Set<InventoryListEntity> inventoryLists;
    
    }
    
    @Entity
    @Table(name = "lists")
    public class InventoryListEntity extends InventoryList {
    
       @ManyToMany(cascade = CascadeType.PERSIST)
       @JoinTable(
          name = "list_parameters",
          joinColumns = @JoinColumn(name = "il_id"),
          inverseJoinColumns = @JoinColumn(name = "parameter_id")
      )
      private Set<ParameterEntity> parameters;
    
    }
    
    1. 如果你想在集合中使用值或嵌入类型,你应该使用@ElementCollection注解。但是您应该记住值类型集合的生命周期完全由其拥有的实体控制。因此,在这种情况下,您不能建立双向关系。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-04-06
      • 1970-01-01
      • 2019-01-21
      • 2015-11-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多