【问题标题】:SpringDataJPA only save mapping table for Many to Many relationshipSpring Data JPA 仅保存多对多关系的映射表
【发布时间】:2015-03-03 23:23:17
【问题描述】:

我有

  • 用户(user_id),
  • LOCATION(location_id、country_id、state_id、city_id),
  • COUNTRY(country_id, name),
  • STATE(state_id, name)
  • 城市(城市 ID,名称)。

通过 USER_LOCATION 表,USER 和 LOCATION 之间存在多对多关系。这是我在 User.java 中的映射:

//bi-directional many-to-many association to Location
@ManyToMany(cascade = CascadeType.ALL)
@JoinTable(
    name="user_location"
    , joinColumns={
        @JoinColumn(name="USER_ID")
        }
    , inverseJoinColumns={
        @JoinColumn(name="LOCATION_ID")
        }
    )
private List<Location> locations;

当我保存 USER 时,我只有前端的 USER.LOCATION.LOCATION_ID 并且我没有 LOCATION 对象的其他字段。我只想插入 USER_LOCATION 表。但是 SpringDataJPA 正在尝试insert into LOCATION with INSERT INTO LOCATION (CITY_ID, COUNTRY_ID, STATE_ID) VALUES (?, ?, ?) bind =&gt; [null, null, null]

所有 LOCATION、COUNTRY、STATE 和 CITY 数据都预先填充到数据库中,我不想为这些表插入任何新记录。我怎样才能插入到 USER_LOCATION 表中?

【问题讨论】:

  • 您是说以后任何时候都不应更新 Location 对象吗?如果是这样,请在 @ManytoMany 映射上设置映射属性 update=false、insert=false 属性

标签: java mysql hibernate jpa spring-data-jpa


【解决方案1】:

我只有前端的 USER.LOCATION.LOCATION_ID 而我没有 有 LOCATION 对象的其他字段。

如果您要将用户与现有位置相关联,那么您需要从数据库中实际获取该现有持久位置并将其设置为关系。

Location location = locationRepository.findById(locationId);
user.getLocations.add(location);
userRepository.persist(user);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-05-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-14
    • 1970-01-01
    • 2020-11-30
    相关资源
    最近更新 更多