У меня есть простое приложение в Mironaut с тремя объектами: клиент, контакт и кредиты.Клиент имеет отношения 1 ко многим с Контактом и Кредитами.Я тестирую с Grails / Gorm, и он отлично работает.
У меня есть класс DataLoader, который хорошо работает и создает все сущности с их связями.
/ ****** Contact.groovy ******* /
package com.gnc.demo.domain
import grails.gorm.annotation.Entity
@Entity
class Contact {
Long id
Long version
Customer customer
static belongsTo = Customer
String email
String phone
String cellPhone
String address
}
/ ****** Customer.groovy ******* /
package com.gnc.demo.domain
import grails.gorm.annotation.Entity
@Entity
class Customer {
Long id
Long version
String driverId
String name
String lastName
static hasMany = [contacts: Contact, loans: Loan]
static constraints = {
contacts nullable: true
loans nullable: true
}
static mapping = {
contacts lazy: false
loans lazy: false
}
}
/ ******Loan.groovy ******* /
package com.gnc.demo.domain
import grails.gorm.annotation.Entity
@Entity
class Loan {
Long id
Long version
Customer customer
static belongsTo = Customer
BigDecimal ammount
long term
BigDecimal rate
}
/ ******* CustomerController.groovy ******* /
package com.gnc.demo.controllers
import com.gnc.demo.domain.Customer
import com.gnc.demo.services.ContactService
import com.gnc.demo.services.CustomerService
import com.gnc.demo.services.LoanService
import io.micronaut.http.annotation.Controller
import io.micronaut.http.annotation.Get
import org.slf4j.Logger
import org.slf4j.LoggerFactory
@Controller("/customer")
class CustomerController {
private static final Logger LOG = LoggerFactory.getLogger(CustomerController.class);
final CustomerService customerService
final LoanService loanService
final ContactService contactService
CustomerController(CustomerService customerService, LoanService loanService, ContactService contactService) {
this.customerService = customerService
this.loanService = loanService
this.contactService = contactService
}
@Get("/")
String index() {
return "Hola ! " + new Date()
}
@Get("/all/{offset}/{max}")
List<Customer> getCustomers(String offset, String max) {
List<Customer> customers = customerService.findAll([offset: offset, max: max])
try {
customers.each { customer ->
// LOG.info(">>> Loans :" +customer.loans.size())
customer.contacts = []
customer.loans = []
}
} catch (Exception e) {
LOG.info(">>> Error :" + e)
}
return customers
}
@Get("/{id}")
Customer getCustomers(String id) {
Customer customer = customerService.get(id)
customer?.contacts = []
customer?.loans = []
customer?.contacts = contactService.findAllByCustomer(customer)
customer?.loans = loanService.findAllByCustomer(customer)
return customer
}
}
Всекод доступен в: https://github.com/gnpitty/com-gnc-demo
Но когда я тестирую в Micronaut с моим браузером: http://localhost:9020/customer/10
, я получаю эту ошибку:
{"message":"Internal Server Error: Error encoding object
[com.gnc.demo.domain.Customer : 10] to JSON: could not initialize proxy - no
Session (through reference chain: com.gnc.demo.domain.Customer[\"contacts\"]-
>java.util.LinkedHashSet[0]->com.gnc.demo.domain.Contact[\"customer\"]-
>com.gnc.demo.domain.Customer_$$_jvst110_0[\"driverId\"])"}