【发布时间】:2021-02-16 20:48:21
【问题描述】:
我有两张桌子category 和financial_year。每个category 都有一个指向financial_year 的外键。
在 Spring MVC/JPA/Hibernate 中我有相应的实体类和存储库接口(扩展 CrudRepository)。当我从CategoryRepository findAll 时,一切正常。每个Category 的FinancialYear 实体都可以很好地获取,我可以通过jsp 显示它。
当我尝试从FinancialYearRepository 到findAll 时,不仅没有提取相应的Category 实体,甚至没有提取FinancialYear 列。 jsp 只在表格中显示一个空行。以下是实体类
**Category.java**
package com.ssg...model;
import java.util.Set;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.Table;
import javax.persistence.Version;
@Entity
@Table(name = "category")
public class Category implements java.io.Serializable {
@Id
@GeneratedValue
private int id;
@ManyToOne
@JoinColumn(name = "financial_year_id")
private FinancialYear financialYear;
private String name;
private String description;
...
...
**FinancialYear.java**
package com.ssg...model;
import java.util.Date;
import java.util.Set;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.Table;
import javax.persistence.Version;
@Entity
@Table(name = "financial_year")
public class FinancialYear implements java.io.Serializable {
@Id
@GeneratedValue
private int id;
@Column(name = "financial_year_start")
private Date financialYearStart;
@Column(name = "financial_year_end")
private Date financialYearEnd;
private String comments;
@OneToMany(mappedBy = "financialYear")
private Set<Category> categories = new HashSet<Category>();
...
...
**JPAConfig.java**
package com.ssg...config;
import java.util.Properties;
import javax.persistence.EntityManagerFactory;
import javax.sql.DataSource;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.dao.annotation.PersistenceExceptionTranslationPostProcessor;
import org.springframework.data.jpa.repository.config.EnableJpaRepositories;
import org.springframework.jdbc.datasource.DriverManagerDataSource;
import org.springframework.orm.jpa.JpaTransactionManager;
import org.springframework.orm.jpa.JpaVendorAdapter;
import org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean;
import org.springframework.orm.jpa.LocalEntityManagerFactoryBean;
import org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter;
import org.springframework.transaction.annotation.EnableTransactionManagement;
@Configuration
@EnableJpaRepositories(basePackages = { "com.ssg...repository" })
@EnableTransactionManagement
public class JpaConfig {
@Bean
public LocalContainerEntityManagerFactoryBean entityManagerFactory() {
LocalContainerEntityManagerFactoryBean factoryBean = new LocalContainerEntityManagerFactoryBean();
factoryBean.setPersistenceUnitName("pbaPersistenceUnit");
factoryBean.setPackagesToScan(new String[] { "com.ssg...model" });
JpaVendorAdapter vendorAdapter = new HibernateJpaVendorAdapter();
factoryBean.setJpaVendorAdapter(vendorAdapter);
factoryBean.setJpaProperties(additionalProperties());
factoryBean.setDataSource(dataSource());
return factoryBean;
}
...
...
当我检查呈现的 jsp (financialYears.jsp) 的源时,我看到以下内容。
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Shri Ganeshaaya Namaha !!!</title>
</head>
<body>
<table border="1" cellpadding="5">
<thead>
<td>FY Start</td>
<td>FY End</td>
<td>FY Comments</td>
</thead>
<c:forEach items="[com.ssg...model.FinancialYear@41e4e4a5, com.ssg...model.FinancialYear@66363545]" var="fy">
<tr>
<td></td>
<td></td>
<td></td>
</tr>
</c:forEach>
</table>
</body>
</html>
【问题讨论】:
标签: mysql spring hibernate jpa model-view-controller