我在最新的SNAPSHOT版本(db46f2c3db784f3596ddd407075c222952d08129)中使用Activator 1.2.3和SecureSocial。
目前我正在尝试使用Play的Ebean在关系数据库中实现用户存储。我发现this SO anwser不再适用了。因此,我正在推动自己的实施。令牌存储非常简单,但是我在存储用户配置文件时遇到了问题。
这是我的实体:
@Entity
public class DbUser extends Model {
@EmbeddedId
public DbUserId id;
@ManyToOne
public DbUser mainProfile;
@OneToMany(mappedBy = "mainProfile")
public Set<DbUser> profiles;
public String firstName;
public String lastName;
public String fullName;
public String email;
public String avatarUrl;
@Constraints.Required
public AuthenticationMethod authMethod;
public OAuth1Info oAuth1Info;
public OAuth2Info oAuth2Info;
public PasswordInfo passwordInfo;
...
}
这是ID实体:
@Embeddable
public class DbUserId {
@Constraints.Required
public String providerId;
@Constraints.Required
public String userId;
...
}
免责声明:我理解这可能不是理想的方式,在此与SecureSocial的选项领域之间进行翻译至少可以说是痛苦的。
我已经调整InMemoryUserService
来处理这些实体,甚至猜测了doLink()
方法应该如何工作。但是,我在运行它时遇到了问题。在应用新演变之前,我得到以下错误:
[info] play - database [default] connected at jdbc:h2:mem:play
[error] c.a.e.s.d.p.DeployCreateProperties - Error with models.DbUser field:oAuth1Info
java.lang.IllegalStateException: Duplicate parameter types in public securesocial.core.OAuth1Info(java.lang.String,java.lang.String)
at com.avaje.ebeaninternal.server.type.reflect.ImmutableMetaFactory.scoreConstructors(ImmutableMetaFactory.java:106) ~[avaje-ebeanorm-3.3.4.jar:na]
at com.avaje.ebeaninternal.server.type.reflect.ImmutableMetaFactory.createImmutableMeta(ImmutableMetaFactory.java:21) ~[avaje-ebeanorm-3.3.4.jar:na]
at com.avaje.ebeaninternal.server.type.DefaultTypeManager.recursiveCreateScalarDataReader(DefaultTypeManager.java:185) ~[avaje-ebeanorm-3.3.4.jar:na]
at com.avaje.ebeaninternal.server.deploy.parse.DeployCreateProperties.createProp(DeployCreateProperties.java:317) [avaje-ebeanorm-3.3.4.jar:na]
at com.avaje.ebeaninternal.server.deploy.parse.DeployCreateProperties.createProp(DeployCreateProperties.java:345) [avaje-ebeanorm-3.3.4.jar:na]
我的假设是OAuthInfo和密码信息根本不是@Entities,我必须创建自己的实体并在它们之间进行映射。但是,我仍然想了解这个错误...