Основная проблема: у меня есть отношение многие ко многим (магазины, продукты) с объектом поиска с именем ProductOffering.В ситуации, когда у меня есть постоянная StoreLocation и я пытаюсь подключить временные продукты, hibernate жалуется ДАЖЕ, ЧТО Я НЕ ХОЧУ СОХРАНИТЬ.
Вопросы:
- Почему grails / gorm / Hibernate пытается спасти мою сущность?
- Есть ли лучший способ решения этой проблемы?
Мои классы доменов выглядят так:
class StoreLocation {
String name
List offerings
static hasMany = [offerings:ProductOffering]
static constraints = {
}
}
class Product {
String name
static hasMany = [offeredBy:ProductOffering]
static constraints = {
name(unique:true)
offeredBy(nullable:true)
}
}
class ProductOffering {
static belongsTo = [product:Product, store:StoreLocation]
static constraints = {
}
}
И мое действие "edit" StoreLocationController выглядит следующим образом.
def edit = {
//get the store we want to edit
def storeLocation = StoreLocation.get(params.id)
//create a transient product and add it to the store
// by attaching it to a transient productOffering
def product = new Product()
def offering = new ProductOffering()
offering.product = product
storeLocation.addToOfferings(offering)
//render the edit page
render(view:"edit", model:[storeLocation:storeLocation])
}
Предположим, у меня есть storeLocation с идентификатором= 1.Я иду, чтобы отредактировать локальный хост StoreLocation: 8080 / myapp / storeLocation / edit / 1
Не имеет значения, как выглядит мой взгляд.Это может быть <p>hello</p>
Я получаю следующую ошибку.
Ошибка 500: свойство not-null ссылается на нулевое или временное значение: ProductOffering.product;вложенным исключением является org.hibernate.PropertyValueException: свойство not-null ссылается на нулевое или временное значение: ProductOffering.product
Трассировка стека не намного полезнее:
org.springframework.dao.DataIntegrityViolationException: свойство not-null ссылается на нулевое или временное значение