2

私は春のデータを持つ休憩バックエンドシステムのために春のブートを使用しています 私は3つの主要な層(コントローラ、サービス、DAO)を持っています。春のブートとトランザクションの境界

私は@Transactionalでサービスクラスに注釈を付け、そのメソッドの1つでは、@ManyToMany関係を持つエンティティを他のエンティティと取り出すことになります。

私は主なエンティティを取得するだけで、私は@ManyToManyの怠惰に依存しています。

問題は、(多くの)SQL文が問題で、トランザクションがまだ実行中であるかのようにコレクションを取得したときに、サービスからコントローラに戻った後です。

@SpringBootApplication 
@ComponentScan(value = { "net.pd.ethraa" }) 
@EnableJpaRepositories(basePackages = { "net.pd.ethraa.dao" }) 
@EntityScan(basePackages = "net.pd.ethraa.common.model") 
@EnableTransactionManagement 
public class EthraaApplication extends SpringBootServletInitializer { 
} 

@RequestMapping(path = "/get/{id}", method = RequestMethod.GET) 
    public Account getAccount(@PathVariable("id") Long id) { 
    Account account = accountService.find(id); 

    for (Permission p : account.getPermissions()) { 
     System.out.println(p.getName()); 
    } 
    return account; 

    } 


@Service 
@Transactional 
public class AccountServiceImpl implements AccountService { 

@Override 
    public Account find(Long id) { 
    return accountDao.findOne(id); 

    } 
} 

@Repository 
public interface AccountDao extends CrudRepository<Account, Long> {} 


@Entity 
@Table(name = "ACCOUNT", uniqueConstraints = @UniqueConstraint(columnNames = { "mobile", "email" })) 
public class Account extends BaseEntity { 
@ManyToMany 
    @JoinTable(name = "ACCOUNT_PERMISSION") 
    private List<Permission> permissions; 
} 

私の期待私はサービス外のコレクションを打ったとき、それはトランザクション境界の外にあるべきであると怠惰な例外を与えるが、それはしないのですか?

答えて

3

デフォルトでは、この動作を可能にするOpenEntityManagerInViewInterceptorが有効になります。

あなたは、アプリケーションの設定ファイルに次のプロパティを使用して、それを無効にすることができます。

spring.jpa.open-in-view=false 
+0

、それはすべてのシナリオのための本当ですか?春のブートは、いくつかのアプリケーションプロパティ/注釈/クラスを通してこれを有効にしますか?ご案内ください。私は最新バージョンのspring boot> 1.4.2で例を試しました。私は怠惰なロード例外があります。 – Barath

+0

このオプションは現在のSpring Bootバージョンではデフォルトで 'true'に設定されています。このインターセプタの登録のための完全な条件は、[ソースコード](https://github.com/spring-projects/spring-boot/blob/v1.4.3.RELEASE/spring-boot-autoconfigure/src/main)にあります。 /java/org/springframework/boot/autoconfigure/orm/jpa/JpaBaseConfiguration.java#L185)。問題がある場合は、サンプルと別の質問を開始してください。 –

関連する問題