我已经跟进了this sample code并尝试使用简单的JPA来实现它。但是,当我尝试使用Google帐户注册或使用现有用户帐户登录时,它会给我这个错误。
[RuntimeException:没有EntityManager绑定到此线程。尝试使用@ play.db.jpa.Transactional]
注释您的操作方法
private static List<User> getAuthUserFind(final AuthUserIdentity identity)
{
-> List<User> query = JPA.em().createQuery(
在谷歌搜索一段时间后,许多解决方案建议在调用播放操作中添加@Transactional
注释,但该操作在播放验证代码中。
是否有针对此问题的解决方案,或者我是否必须将其与Ebeans一起使用?
我正在使用Play Framework 2.2.1并在Java中实现我的程序。
答案 0 :(得分:0)
没有必要使用Ebean, 我使用mybatis作为持久性提供程序,但为了保存用户和登录没有问题,你应该使用相同的散列算法。
哈希算法用于存储密码。
要使用JPA或您想要的自定义持久性提供程序,您应该实现Authentication Provider接口,请参阅示例项目中的UsernamePasswordAuthProvider以获取更多详细信息。
特别关注&#34; signupUser&#34;和&#34; loginUser&#34;方法
我修改了play-authenticate以支持登录/密码而不是电子邮件/密码identityId。
请参阅Modified version of Play-Authenticate。
干杯。
答案 1 :(得分:0)
您可以使用JPA.withTransaction(回调)。如果你不能将@Transactional放在一个方法中,或者你不想这样做,这是更好的方法。
干杯,
阿尔贝托