2016-02-17 5 views
0

Я пытаюсь извлечь мои данные из базы данных (MySQL). Я использую Spring 4.2.4 и Hibernate 5.0.7 и Java 8 с Netbeans. Пока это отлично работает, но мои взаимосвязанные отношения «один ко многим» не извлекаются вместе с остальными данными. Я получаю эту информацию:Hibernate получение данных один-ко-многим - MySQLSyntaxErrorException

Caused by: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Table 'biuro.client_polisazycie' doesn't exist 

Это волшебно соединяет имя 2 таблиц в одну, что, конечно, не существует ... Ошибка появляется здесь, пока я проверяю данные client.polisy, который бросает это исключение :

@Override 
public Client findByIdWithPolisa(int id) { 
    Client client = this.findById(id); //client does not have "polisy" data 
    Hibernate.initialize(client); 
    return client; 
} 

Вообще-то я пытался инициализировать набор данных внутри объекта из клиента, чтобы избежать выборки нетерпеливый (предпочитают ленивый тип).

Здесь Клиент лицо:

@Entity 
@Table(name = "client") 
public class Client implements Serializable { 

private static final long serialVersionUID = 1L; 
@Id 
@GeneratedValue(strategy = GenerationType.AUTO) 
@Basic(optional = false) 
@Column(name = "id") 
private Integer id; 

//... 

@Basic(optional = false) 
@Column(name = "creationDate") 
@Temporal(TemporalType.DATE) 
private Date creationDate; 

@OneToMany(mappedBy = "", cascade = CascadeType.ALL) 
private Set<Polisazycie> polisy; 
//...skipping all getters and setters 

Позвольте мне сказать, что если я использую mappedBy = "polisazycie" он пытается получить данные в»... (путь) .../Polisazycie. polisazycie ", поэтому он падает для меня тогда.

Вот Polisazycie объект:

@Entity 
@Table(name = "polisazycie") 
public class Polisazycie implements Serializable { 

private static final long serialVersionUID = 1L; 

@Id 
@GeneratedValue(strategy = GenerationType.AUTO) 
@Basic(optional = false) 
@Column(name = "id") 
private Integer id; 

//... 

@JoinColumn(name = "idClient") 
@ManyToOne 
private Client client; 

А вот мой HibernateConfiguration класс:

@Configuration 
@EnableTransactionManagement 
@ComponentScan({"com.th.officesuiteservice.services", "com.th.officesuiteservice.dao"}) 
@PropertySource(value = {"classpath:application.properties"}) 
public class HibernateConfiguration { 

@Autowired 
private Environment environment; 

@Bean 
public LocalSessionFactoryBean sessionFactory() { 
    LocalSessionFactoryBean sessionFactory = new LocalSessionFactoryBean(); 
    sessionFactory.setDataSource(dataSource()); 
    sessionFactory.setPackagesToScan(new String[]{"com.th.officesuiteservice.model"}); 
    sessionFactory.setHibernateProperties(hibernateProperties()); 
    return sessionFactory; 
} 

@Bean 
public DataSource dataSource() { 
    DriverManagerDataSource dataSource = new DriverManagerDataSource(); 
    dataSource.setDriverClassName(environment.getRequiredProperty("jdbc.driverClassName")); 
    dataSource.setUrl(environment.getRequiredProperty("jdbc.url")); 
    dataSource.setUsername(environment.getRequiredProperty("jdbc.username")); 
    dataSource.setPassword(environment.getRequiredProperty("jdbc.password")); 
    return dataSource; 
} 

private Properties hibernateProperties() { 
    Properties properties = new Properties(); 
    properties.put("hibernate.dialect", environment.getRequiredProperty("hibernate.dialect")); 
    properties.put("hibernate.show_sql", environment.getRequiredProperty("hibernate.show_sql")); 
    properties.put("hibernate.format_sql", environment.getRequiredProperty("hibernate.format_sql")); 
    return properties; 
} 

@Bean 
@Autowired 
public HibernateTransactionManager transactionManager(SessionFactory s) { 
    HibernateTransactionManager txManager = new HibernateTransactionManager(); 
    txManager.setSessionFactory(s); 
    return txManager; 
} 

}

Итак, подведем итог, в то время как я выборки данных клиента, все они выбираются правильно, только не Set (Polisazycie) и имя таблицы, которое он пытается извлечь, объединены из 2 таблиц. Что я здесь делаю неправильно?

ответ

1

Вы не указали значение в атрибуте mappedBy на карте Polisazycie. Попробуйте это

@OneToMany(mappedBy = "client", cascade = CascadeType.ALL) 
private Set<Polisazycie> polisy; 
+0

Я знал, что чего-то не хватает ... Большое спасибо за вашу помощь! – Infinito

+0

Добро пожаловать, рад, что помог. –

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