【问题标题】:Hibernate not fetching non-owning entity休眠不获取非拥有实体
【发布时间】:2021-02-16 20:48:21
【问题描述】:

我有两张桌子categoryfinancial_year。每个category 都有一个指向financial_year 的外键。

在 Spring MVC/JPA/Hibernate 中我有相应的实体类和存储库接口(扩展 CrudRepository)。当我从CategoryRepository findAll 时,一切正常。每个CategoryFinancialYear 实体都可以很好地获取,我可以通过jsp 显示它。

当我尝试从FinancialYearRepositoryfindAll 时,不仅没有提取相应的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


    【解决方案1】:

    我看到有人对我的问题投了反对票,这是正确的。该人说没有足够的研究努力,我同意。该人士还表示,问题不清楚。但是,让我说我是stackoverflow的新手。关于我需要进一步调查的方向以及我需要在问题中添加什么以使其更清楚的某种指示会有所帮助。如上所述的简短评论让像我这样的新手高高在上,无处可求帮助。因此,虽然我知道每个人都非常忙碌,但我会要求任何响应者(对任何人未来的任何问题)更加体贴,尤其是对新来者,以便我们可以利用这个美妙的网站。

    话虽如此,虽然评论让我有点失望,但它促使我在我遇到的问题上多花一点时间,虽然我的工作时间很紧,编程不是我的主要工作,我可以解决问题。这个问题非常简单,因为我没有在我的 jsp 中包含 jstl taglib。快速浏览一下我的代码会向所有专家展示它,如果您向我指出来,可能会很体贴。

    我接受我的错误并为此道歉。我还要求所有对本网站如此有帮助的人也对新手表示一些考虑。

    我的问题已经解决了。

    【讨论】:

      猜你喜欢
      • 2018-02-11
      • 2016-12-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-04-11
      • 1970-01-01
      相关资源
      最近更新 更多