【问题标题】:hibernate save one to one with master value休眠与主值一对一保存
【发布时间】:2019-05-06 18:06:00
【问题描述】:

想要保存一对一的主值,如下所示。 有一个地址类,其中包含一对一的城市类。 但是城市是我的主值,当我保存地址时我不想更新它。只需从 UI 的下拉列表中选择城市并将对象设置为地址并保存地址。但同时保存低于错误。

org.hibernate.TransientPropertyValueException: 对象引用了一个未保存的瞬态实例 - 在刷新之前保存瞬态实例:com.app.fd.entity.Address.city -> com.app.fd.entity.City

@Entity
public class Address extends BaseEntity implements Serializable {
/**
 * 
 */
private static final long serialVersionUID = 1L;

@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "CONTACT_SEQ_GEN")
@SequenceGenerator(name="CONTACT_SEQ_GEN", sequenceName = "CONTACT_SEQ", allocationSize=5)
@Column(name = "id", updatable = false, nullable = false)
private Long id;

@Size(max = 50)
@NotNull
private String address1;

@Size(max = 50)
private String address2;

@Size(max = 15)
@NotNull
private String state;

@Size(max = 10)
@NotNull
private String pin;

@Size(max = 255)
private String landmark;

private Boolean deleted;

@OneToOne()
@JoinColumn(name = "city_id", insertable=false,updatable=false)
private City city;

}


@Entity
public class City {

/**
 * 
 */

private static final long serialVersionUID = 1L;


@Id
@GeneratedValue(strategy=GenerationType.AUTO)
private int id;

@Size(max = 30)
@Column(name = "name",unique = true)
private String name;

@Size(max = 5)
@Column(name = "code",unique = true)
private String code;
}




repository.save(address); // TransientPropertyValueException error

【问题讨论】:

    标签: java hibernate


    【解决方案1】:

    您收到此错误是因为您正在使用未保存/分离的City 实体保存Address 实体。要解决此问题,您使用 cascadeType.ALL,但在您的情况下,您不想修改城市对象。您可以使用以下方法。

    City cityFromUI = new City();
    cityFromUI.setId(id); //get this id from UI. Store city dropdown as key = id and value = cityName
    Address myNewAddress = new Address();
    myNewAddress.set*()//Set other address fields
    myNewAddress.setCity(cityFromUI);
    repository.save(address);
    

    使用上述代码,您的地址将映射到相应的城市,并且您的城市不会按照您在 Address 实体中定义的 updatableto false 进行更新。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-01-11
      • 1970-01-01
      • 2013-08-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-11-28
      • 2016-03-12
      相关资源
      最近更新 更多