Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Spring安全性-未创建默认表_Spring_Spring Security_Spring Social Google - Fatal编程技术网

Spring安全性-未创建默认表

Spring安全性-未创建默认表,spring,spring-security,spring-social-google,Spring,Spring Security,Spring Social Google,我正试图在Spring启动应用程序中,在Spring安全性的基础上集成Spring Social。但Spring Security似乎在创建默认表时遇到了问题,例如UserConnection、UserProfile等,因为在成功建立到oauth2提供程序的连接后,我收到了以下SQL错误: PreparedStatementCallback; bad SQL grammar [select userId from UserConnection where providerId = ? and p

我正试图在Spring启动应用程序中,在Spring安全性的基础上集成Spring Social。但Spring Security似乎在创建默认表时遇到了问题,例如UserConnection、UserProfile等,因为在成功建立到oauth2提供程序的连接后,我收到了以下SQL错误:

PreparedStatementCallback; bad SQL grammar [select userId from UserConnection where providerId = ? and providerUserId = ?]; nested exception is org.h2.jdbc.JdbcSQLException: Tabelle "USERCONNECTION" nicht gefunden Table "USERCONNECTION" not found; SQL statement: select userId from UserConnection where providerId = ? and providerUserId = ? [42102-185]
这是spring提供的JdbcUsersConnectionRepository中的静态SQL调用。我试图切换到InMemory实现,以避免SQL问题,但随后出现了下一个问题:

PreparedStatementCallback; bad SQL grammar [INSERT into userProfile(userId, email, firstName, lastName, name, username) values(?,?,?,?,?,?)]; nested exception is org.h2.jdbc.JdbcSQLException: Tabelle "USERPROFILE" nicht gefunden Table "USERPROFILE" not found; SQL statement: INSERT into userProfile(userId, email, firstName, lastName, name, username) values(?,?,?,?,?,?) [42102-185]
USERPROFILE表也丢失

在我发布大量配置片段之前,您是否已经知道一些我可能忘记的信息,这些信息告诉spring为我创建这些表?:)

目前,我使用的是Spring引导标准H2内存数据库,它与JpaRepositories配合得很好


谢谢!:)

自己找到了解决方案

我最终发现,第一件事并不是由某种奇特的自动Spring机制处理的,而是在src/main/resources目录中使用一个简单的“schema.sql”

创建表用户连接(
userId varchar(255)不为空,
providerId varchar(255)不为空,
providerUserId varchar(255),
秩int不为空,
displayName varchar(255),
profileUrl varchar(512),
imageUrl varchar(512),
accessToken varchar(1024)不为空,
秘密瓦尔查(255),
刷新令牌varchar(255),
ExpireTimeBigint,
主键(userId、providerId、providerUserId));
在UserConnection上创建唯一索引UserConnectionRank(userId、providerId、rank);
创建表UserProfile(
userId varchar(255)不为空,
电子邮件varchar(255),
名字叫瓦查尔(255),
姓氏varchar(255),
名称varchar(255),
用户名varchar(255),
主键(userId));

在UserProfile(userId)上创建唯一索引UserProfilePK没错。SpringSocial不会自动为您创建这些表。原因有很多,但主要原因是没有一种一刀切的方法来创建这些表。虽然我们可以为每个DB供应商定义一个特定于供应商的SQL并自动创建这些表,但这样做从来都不是优先考虑的事情。但问题是,当我尝试自己使用“@Entity”和“@Table”创建这些实体时,spring会抱怨其他表(用户、用户、角色、权限等)我必须自己创造它们。这不是很奇怪吗?!这些表不是在magic schema.sql中创建的。它们是在飞行中创造的吗?!为什么spring不抱怨这种方法?!在本教程之后,我就可以使用它了,但是我在将sql转换为类实体时遇到了一个问题。spring希望我创建所有表,而不是这两个表