web-dev-qa-db-ja.com

非nullプロパティが一時的な値を参照しています-一時的なインスタンスは現在の操作の前に保存する必要があります

私は2つのドメインモデルと1つのSpring REST Controller of below:

@Entity
public class Customer{

@Id
private Long id;

@OneToOne(fetch = FetchType.EAGER)
@JoinColumn(name="COUNTRY_ID", nullable=false)
private Country country;

// other stuff with getters/setters

}

@Entity
public class Country{

@Id
@Column(name="COUNTRY_ID")
private Integer id;

// other stuff with getters/setters

}

春REST Controller:

@Controller
@RequestMapping("/shop/services/customers")
public class CustomerRESTController {

   /**
    * Create new customer
    */
    @RequestMapping( method=RequestMethod.POST)
    @ResponseStatus(HttpStatus.CREATED)
    @ResponseBody
    public com.salesmanager.web.entity.customer.Customer createCustomer(@Valid @RequestBody   Customer customer, Model model, HttpServletRequest request, HttpServletResponse response) throws Exception {

        customerService.saveOrUpdate(customer);

        return customer;
    }

    // other stuff
}

上記のREST以下のJSONを本文としてサービスを呼び出しています:

{
    "firstname": "Tapas",
    "lastname": "Jena",
    "city": "Hyderabad",
    "country": "1"
}

国コードに国コード1がすでに存在する場合、国テーブルにあります。問題は、このサービスを呼び出しているときにエラーが発生することです:

org.springframework.dao.InvalidDataAccessApiUsageException: org.hibernate.TransientPropertyValueException: Not-null property references a transient value - transient instance must be saved before current operation: com.test.model.Customer.country -> com.test.model.Country; nested exception is Java.lang.IllegalStateException: org.hibernate.TransientPropertyValueException: Not-null property references a transient value - transient instance must be saved before current operation: com.test.model.Customer.country -> com.test.model.Country

どんな助けも感謝します!

34
Tapas Jena

CascadeType.ALLを入れてみてください

@OneToOne(fetch = FetchType.EAGER,cascade=CascadeType.ALL)
@JoinColumn(name="COUNTRY_ID", nullable=false) 

private Country country;
40
Raju Rudru

同様の問題がありました。 2つのエンティティ:ドキュメントおよびステータスドキュメントは、ステータスとの関係OneToManyを持ち、これはステータスの履歴を表しましたドキュメント持っていました。

そのため、@NotNull@ManyToOneドキュメント内部ステータスの参照。

また、実際のStatus of Documentを知る必要がありました。だから、私は別の関係が必要でした、今回は@OneToOne、また@NotNull、内部ドキュメント

問題は、両方のエンティティが@NotNull他への参照?

解決策は:remove @NotNullactualStatus参照からの参照。これにより、両方のエンティティを永続化できました。

14
djejaquino

変更する必要があります:

@OneToOne(fetch = FetchType.EAGER)
@JoinColumn(name="COUNTRY_ID", nullable=false)
private Country country;

に:

@OneToOne(fetch = FetchType.EAGER)
@JoinColumn(name="COUNTRY_ID")
private Country country;

ヌル可能設定を削除するだけです。

0