2015-01-23 4 views
0

У меня есть следующий простой сценарий:Spring MVC с Hibernate - один ко многим

Cars table: Id, Name, Model 

Cars Schedule table:Id, CarId, ScheduleTime, ScheduleDate 

Я использую Spring MVC с Hibernate, со структурой:

  • домен
  • репо
  • repoImpl
  • обслуживание
  • serv iceImpl

Что мне нужно сделать, это показать название автомобиля в списке расписаний автомобилей, не добавляя поле CarName в таблицу CarsSchedule.

Какова наилучшая практика для этого?

+0

Вы можете добавить классы объектов к вашему вопросу –

ответ

1

В Car лица вы должны иметь

@OneToMany(mappedBy = "car") 
private List<CarsSchedule> schedules; 

Я предположил, что отношение @OneToMany, но вы можете просто включить его в @OneToOne private CarsSchedule schedule;, если это так.

И в CarsSchedule сущности, это

@ManyToOne 
@JoinColumn(name = "CarId") 
private Car car; 

С помощью этой установки, когда у вас есть экземпляр carsSchedule в контроллере (и модели), можно отобразить имя автомобиля на странице с #{carsSchedule.car.name}.

+0

Я получаю: Property 'car' не найден по типу com.dev.app.domain.CarSchedule –

+1

Получали ли вы методы получения и настройки для этих полей? –

+0

Спасибо большое Predrag –

0

Я думаю, вы должны иметь отношения один-ко-многим в Перечне стола Автомобили:

//in class CarsSchedule 
@ManyToOne(fetch = FetchType.LAZY) 
@JoinColumn(name = "CAR_ID", nullable = false) 
public Stock getCar() { 
    return this.car; 
} 

Затем в контроллере, вы получите список CarSchedule (то есть также автомобиль в него) и положить список в модель:

@RequestMapping(value = "car-list", method = RequestMethod.GET) 
    public String getList(HttpSession session, Map<String, Object> model) { 
     //get the list from the service 
     List<CarsSchedule> list = service.getCarScheduleList(); 
     //put into the model 
     model.put("form", new PersonUserRoleForm()); 
     return "mymodel"; 
} 

то у вас есть mymodel.jsp, может быть, где вы можете retieve переменного MyModel

вы можете следовать этому простому учебнику: http://www.mkyong.com/hibernate/hibernate-one-to-many-relationship-example-annotation/

Ciao

+0

Я не использую xml для связи таблиц, и даже если это так, как я могу получить название автомобиля в модели, можете ли вы объяснить больше? –

+0

OK Али надеюсь, что теперь яснее ... – Paolof76

0

Если вы устанавливаете аннотации по методе собственности аксессора, вы можете просто добавить

@Transient 
public String getName() { 
    return car.getName(); 
} 

Он будет невидим для вашей базы данных, но открыт для всех остальных слоев. В JSP доступ будет как ${carsSchedule.name}, и это было бы немедленным ребенок в вашем JSON или XML, если это представление используется

Даже если сами ваши свойства пояснительных вы все еще можете сделать

@Transient 
private String name; 

public String getName() { 
    return car.getName(); 
} 

I повторите, что ваша основная идея - избегать сохранения другого поля. Обратите внимание, что переходная аннотация - это javax.persistence.Transient и не имеет никакого значения для сериализации просто говорит поставщику постоянства игнорировать поле при сохранении

Смежные вопросы