gpt4 book ai didi

java - Hibernate 一对多数据获取 - MySQLSyntaxErrorException

转载 作者:行者123 更新时间:2023-11-29 11:42:55 24 4
gpt4 key购买 nike

我正在尝试从数据库(MySQL)获取我的数据。我正在使用 Spring 4.2.4 和 Hibernate 5.0.7,以及带有 Netbeans 的 Java 8。到目前为止,它工作得很好,但我相关的一对多关系没有与其余数据一起获取。我不断收到此信息:

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

它神奇地将两个表的名称连接到一个表中,这当然不存在......当我检查 client.polisy 数据时,此处显示错误,这引发了该异常:

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

通常,我尝试在客户端对象内部初始化 Set 数据,以避免获取急切的数据(更喜欢惰性类型)。

这是客户端实体:

@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

让我说,如果我使用 ma​​ppedBy = "polisazycie" 它会尝试将数据获取到“...(path).../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;
}

}

总而言之,当我获取客户端数据时,所有这些数据都被正确获取,只是集合(Polisazycie)没有获取,并且它尝试从中获取的表名是由 2 个表组合而成的。我在这里做错了什么?

最佳答案

您在 Polisazycie 映射的 mappedBy 属性中缺少值。试试这个

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

关于java - Hibernate 一对多数据获取 - MySQLSyntaxErrorException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35454360/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com