0

私が見つけたすべての例には、Hibernate.cfg.xml に関する情報が含まれていますが、代わりに hibernate.properties を使用しています。

リソースフォルダー内:

hibernate.dialet=org.hibernate.dialect.PostgreSQL9Dialect
hibernate.show_sql=true
hibernate.hbm2ddl.auto=update

ここでプロパティを使用しています:

@Configuration
@EnableJpaRepositories("com.some.server.repository")
@EnableTransactionManagement
@PropertySource("classpath:db.properties")
@ComponentScan("com.some.server")

public class DataBaseConfig {

@Resource
private Environment env;

@Bean
public LocalContainerEntityManagerFactoryBean entityManagerFactory() {
    LocalContainerEntityManagerFactoryBean em = new LocalContainerEntityManagerFactoryBean();
    em.setDataSource(dataSource());
    em.setPackagesToScan(env.getRequiredProperty("db.entity.package"));
    em.setJpaVendorAdapter(new HibernateJpaVendorAdapter());
    em.setJpaProperties(getHibernateProperties());

    return em;
}

@Bean
public DataSource dataSource() {
    BasicDataSource ds = new BasicDataSource();
    ds.setUrl(env.getRequiredProperty("db.url"));
    ds.setDriverClassName(env.getRequiredProperty("db.driver"));
    ds.setUsername(env.getRequiredProperty("db.username"));
    ds.setPassword(env.getRequiredProperty("db.password"));

    ds.setInitialSize(Integer.valueOf(env.getRequiredProperty("db.initialSize")));
    ds.setMinIdle(Integer.valueOf(env.getRequiredProperty("db.minIdle")));
    ds.setMaxIdle(Integer.valueOf(env.getRequiredProperty("db.maxIdle")));
    ds.setTimeBetweenEvictionRunsMillis(Long.valueOf(env.getRequiredProperty("db.timeBetweenEvictionRunsMillis")));
    ds.setMinEvictableIdleTimeMillis(Long.valueOf(env.getRequiredProperty("db.minEvictableIdleTimeMillis")));
    ds.setTestOnBorrow(Boolean.valueOf(env.getRequiredProperty("db.testOnBorrow")));
    ds.setValidationQuery(env.getRequiredProperty("db.validationQuery"));

    return ds;
}

@Bean
public PlatformTransactionManager transactionManager() {
    JpaTransactionManager manager = new JpaTransactionManager();
    manager.setEntityManagerFactory(entityManagerFactory().getObject());
    return manager;
}




public Properties getHibernateProperties() {
    try {
        Properties properties = new Properties();
        InputStream is = getClass().getClassLoader().getResourceAsStream("hibernate.properties");
        properties.load(is);

        return properties;
    } catch (IOException e) {
        throw new IllegalArgumentException("Can't find 'hibernate.properties' in classpath!", e);
    }
}

}

hibernate.properties を使用してセッション (fetch.LAZY 用) を取得する機会はありますか?

アップデート:

私はJPAを持っていますが、まだセッションが必要です。

私のエンティティには次のものがあります。

 @Entity
 @Table(name = "users")
 public class User  {

  ...

@ManyToOne(fetch = FetchType.LAZY, cascade = {CascadeType.MERGE, CascadeType.PERSIST})
@JoinColumn(name = "id_city", nullable = true)
private City city;

public City getCity() {
    return city;
}

public void setCity(City city) {
    this.city = city;
}

...

}

と:

@Entity
@Table(name = "city")
public class City {
 ....

@OneToMany(fetch = FetchType.LAZY, mappedBy = "city")
@JsonIgnore
private Set<User> users;

public Set<User> getUsers() {
    return users;
}

public void setUsers(Set<User> users) {
    this.users = users;
}

... 

}

だから、私が取得しようとすると:

@RestController
@RequestMapping("/user")
public class UserController {

@Autowired
private UserRepository userRepository;

@Autowired
private ProfessionRepository profRepository;

@RequestMapping(value = "", method = RequestMethod.GET)
public List<User> getAllUsers() {
    //  List<User> list = userRepository.findAll();
    return userRepository.findAll();
}

From:

public interface UserRepository extends JpaRepository<User, Long>{
}

id_city が空でない場合、エラーが発生しました:

ここに画像の説明を入力

id_city が空の場合 (Fetch.LAZY が使用されていない場合)、すべて問題ありません。

ここに画像の説明を入力

4

0 に答える 0