我正在使用Hibernate 4.2,Spring 3.2和Spring Security 3.1(最新版本,而不是混合弹簧版本)。 Spring Security最近在最后实施,它引起了一个问题。
问题是我有一个在启动时初始化Hibernate连接数据库的类。它将少量对象写入数据库。简化以便于理解。
public class User {
@Id String username;
@ManyToMany List<Present> presents;
}
public class Present {
@Id String present;
}
用于写入数据库的方法:
public class InsertTests {
@Autowired
private AuthService authService;
public void addImages() {
authService.addPresent("/presents/first.prs");
authService.addPresent("/presents/second.prs");
}
public void addPeople() {
// NOTE: The addUser adds a default batch present to the user.
authService.addUser("Baby");
authService.addUser("Mommy");
authService.addUser("Tester");
}
public void initData(){
addPresents();
addPeople();
}
}
使用的xml配置:
<bean id="insertTests" class="org.security.service.InsertTests" init-method="initData"/>
使用hd2bm创建3个表,User,User_Present,Present。 如果没有启用Spring Security,则所有内容都会正确插入到数据库中,但是当它在web.xml中启用时:
<filter>
<filter-name>springSecurityFilterChain</filter-name>
<filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
</filter>
<filter-mapping>
<filter-name>springSecurityFilterChain</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
只有添加的用户和礼物才会被提交到数据库。 User_Presents表将完全为空。我在调试时发现的奇怪的事情是,在方法刚完成之后,数据会出现在数据库中。但是之后spring调用了一个contextDestroy链来擦除表。在应用程序运行后添加User + Present。还有另一种方法我应该初始化默认方法吗?