Java 使用hibernate向表中添加配方时违反约束的列表

Java 使用hibernate向表中添加配方时违反约束的列表,java,mysql,spring,hibernate,Java,Mysql,Spring,Hibernate,我试图将Hibernate集成到我的Spring项目中,用户可以注册、登录,然后创建一个菜谱。我建立的关系意味着一个配方必须有一个用户。因此,在我的RecipeDao中,配方通过principal.getName()获取用户名,然后将其与配方一起保存到数据库中。配方保存到我的配方表,但是,我被抛出此错误 org.springframework.web.util.NestedServletException: Request processing failed; nested exception

我试图将Hibernate集成到我的Spring项目中,用户可以注册、登录,然后创建一个菜谱。我建立的关系意味着一个配方必须有一个用户。因此,在我的RecipeDao中,配方通过principal.getName()获取用户名,然后将其与配方一起保存到数据库中。配方保存到我的配方表,但是,我被抛出此错误

org.springframework.web.util.NestedServletException: Request processing failed; nested exception is javax.validation.ConstraintViolationException: Validation failed for classes [com.finalspringproject.dao.User] during update time for groups [com.finalspringproject.dao.PersistenceValidationGroup, ]
List of constraint violations:[
    ConstraintViolationImpl{interpolatedMessage='may not be empty', propertyPath=password, rootBeanClass=class com.finalspringproject.dao.User, messageTemplate='{org.hibernate.validator.constraints.NotBlank.message}'}
    ConstraintViolationImpl{interpolatedMessage='may not be empty', propertyPath=email, rootBeanClass=class com.finalspringproject.dao.User, messageTemplate='{org.hibernate.validator.constraints.NotBlank.message}'}
]
    org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:948)
    org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:838)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:644)
    org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:812)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:725)
    org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
    org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:330)
    org.springframework.security.web.access.intercept.FilterSecurityInterceptor.invoke(FilterSecurityInterceptor.java:118)
    org.springframework.security.web.access.intercept.FilterSecurityInterceptor.doFilter(FilterSecurityInterceptor.java:84)
    org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342)
    org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:113)
    org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342)
    org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:103)
    org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342)
    org.springframework.security.web.authentication.AnonymousAuthenticationFilter.doFilter(AnonymousAuthenticationFilter.java:113)
    org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342)
    org.springframework.security.web.authentication.rememberme.RememberMeAuthenticationFilter.doFilter(RememberMeAuthenticationFilter.java:146)
    org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342)
    org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter.doFilter(SecurityContextHolderAwareRequestFilter.java:54)
    org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342)
    org.springframework.security.web.savedrequest.RequestCacheAwareFilter.doFilter(RequestCacheAwareFilter.java:45)
    org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342)
    org.springframework.security.web.authentication.AbstractAuthenticationProcessingFilter.doFilter(AbstractAuthenticationProcessingFilter.java:183)
    org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342)
    org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:105)
    org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342)
    org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:87)
    org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342)
    org.springframework.security.web.FilterChainProxy.doFilterInternal(FilterChainProxy.java:192)
    org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:160)
    org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:346)
    org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:259)
root cause

javax.validation.ConstraintViolationException: Validation failed for classes [com.finalspringproject.dao.User] during update time for groups [com.finalspringproject.dao.PersistenceValidationGroup, ]
List of constraint violations:[
    ConstraintViolationImpl{interpolatedMessage='may not be empty', propertyPath=password, rootBeanClass=class com.finalspringproject.dao.User, messageTemplate='{org.hibernate.validator.constraints.NotBlank.message}'}
    ConstraintViolationImpl{interpolatedMessage='may not be empty', propertyPath=email, rootBeanClass=class com.finalspringproject.dao.User, messageTemplate='{org.hibernate.validator.constraints.NotBlank.message}'}
]
    org.hibernate.cfg.beanvalidation.BeanValidationEventListener.validate(BeanValidationEventListener.java:161)
    org.hibernate.cfg.beanvalidation.BeanValidationEventListener.onPreUpdate(BeanValidationEventListener.java:102)
    org.hibernate.action.EntityUpdateAction.preUpdate(EntityUpdateAction.java:237)
    org.hibernate.action.EntityUpdateAction.execute(EntityUpdateAction.java:86)
    org.hibernate.engine.ActionQueue.execute(ActionQueue.java:273)
    org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:265)
    org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:185)
    org.hibernate.event.def.AbstractFlushingEventListener.performExecutions(AbstractFlushingEventListener.java:321)
    org.hibernate.event.def.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java:51)
    org.hibernate.impl.SessionImpl.flush(SessionImpl.java:1216)
    org.springframework.orm.hibernate3.SpringSessionSynchronization.beforeCommit(SpringSessionSynchronization.java:145)
    org.springframework.transaction.support.TransactionSynchronizationUtils.triggerBeforeCommit(TransactionSynchronizationUtils.java:95)
    org.springframework.transaction.support.AbstractPlatformTransactionManager.triggerBeforeCommit(AbstractPlatformTransactionManager.java:925)
    org.springframework.transaction.support.AbstractPlatformTransactionManager.processCommit(AbstractPlatformTransactionManager.java:738)
    org.springframework.transaction.support.AbstractPlatformTransactionManager.commit(AbstractPlatformTransactionManager.java:724)
    org.springframework.transaction.interceptor.TransactionAspectSupport.commitTransactionAfterReturning(TransactionAspectSupport.java:475)
    org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:270)
    org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:94)
    org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172)
    org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:631)
    com.finalspringproject.dao.RecipeDAO$$EnhancerByCGLIB$$40f9f16.saveOrUpdate(<generated>)
    com.finalspringproject.service.RecipeService.saveOrUpdate(RecipeService.java:71)
    com.finalspringproject.service.RecipeService$$FastClassByCGLIB$$96c55643.invoke(<generated>)
    org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:204)
    org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:627)
    com.finalspringproject.service.RecipeService$$EnhancerByCGLIB$$20d5df6c.saveOrUpdate(<generated>)
    com.finalspringproject.controllers.RecipeController.doCreate(RecipeController.java:90)
    sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
    sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
    java.lang.reflect.Method.invoke(Unknown Source)
    org.springframework.web.method.support.InvocableHandlerMethod.invoke(InvocableHandlerMethod.java:219)
    org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:132)
    org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:104)
    org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandleMethod(RequestMappingHandlerAdapter.java:745)
    org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:686)
    org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:80)
    org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:925)
    org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:856)
    org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:936)
    org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:838)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:644)
    org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:812)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:725)
    org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
    org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:330)
    org.springframework.security.web.access.intercept.FilterSecurityInterceptor.invoke(FilterSecurityInterceptor.java:118)
    org.springframework.security.web.access.intercept.FilterSecurityInterceptor.doFilter(FilterSecurityInterceptor.java:84)
    org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342)
    org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:113)
    org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342)
    org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:103)
    org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342)
    org.springframework.security.web.authentication.AnonymousAuthenticationFilter.doFilter(AnonymousAuthenticationFilter.java:113)
    org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342)
    org.springframework.security.web.authentication.rememberme.RememberMeAuthenticationFilter.doFilter(RememberMeAuthenticationFilter.java:146)
    org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342)
    org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter.doFilter(SecurityContextHolderAwareRequestFilter.java:54)
    org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342)
    org.springframework.security.web.savedrequest.RequestCacheAwareFilter.doFilter(RequestCacheAwareFilter.java:45)
    org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342)
    org.springframework.security.web.authentication.AbstractAuthenticationProcessingFilter.doFilter(AbstractAuthenticationProcessingFilter.java:183)
    org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342)
    org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:105)
    org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342)
    org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:87)
    org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342)
    org.springframework.security.web.FilterChainProxy.doFilterInternal(FilterChainProxy.java:192)
    org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:160)
    org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:346)
    org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:259)
这是我的食谱服务课

@Service("recipeService")
public class RecipeService {

    private RecipeDAO recipeDao;


public RecipeService() {

}
public List<Recipe> getCurrent() {
    System.out.println("In the Current Service");
    return recipeDao.getRecipe();

}

public List<Recipe> getCurrent(String username) {

    System.out.println("In the Current Service with username");
    return recipeDao.getRecipe(username);

}

@Autowired
public void setRecipeDao(RecipeDAO recipeDao) {
    this.recipeDao = recipeDao;
}
@Secured({"ROLE_USER","ROLE_ADMIN"})
public void create(Recipe recipe){
    recipeDao.saveOrUpdate(recipe);
}

public boolean hadRecipe(String name) {
    if(name ==null) {
        return false;
    }

    List<Recipe> recipes = recipeDao.getRecipe(name);

    if(recipes.size()==0){
        return false;
    }
    return true;
}
public Recipe getRecipe(String username) {

    if(username==null){
        return null;
    }

    List<Recipe> recipes = recipeDao.getRecipe(username);

    if(recipes.size()==0){
        return null;
    }
    return recipes.get(0);
}
public void saveOrUpdate(Recipe recipe) {

    System.out.println("in the save or update/ Service");
        recipeDao.saveOrUpdate(recipe);

}
public void delete(int id) {

    recipeDao.delete(id);

}
@服务(“配方服务”)
公共类服务{
私人收款;私人收款;
公共服务(){
}
公共列表getCurrent(){
System.out.println(“在当前服务中”);
返回recipeDao.getRecipe();
}
公共列表getCurrent(字符串用户名){
System.out.println(“在当前服务中使用用户名”);
返回recipeDao.getRecipe(用户名);
}
@自动连线
公共无效设置RecipeDAO(RecipeDAO RecipeDAO){
this.recipeDao=recipeDao;
}
@安全({“角色\用户”、“角色\管理员”})
公共无效创建(配方){
recipeDao.saveOrUpdate(配方);
}
公共布尔hadRecipe(字符串名称){
if(name==null){
返回false;
}
列出配方=recipeDao.getRecipe(名称);
if(recipes.size()==0){
返回false;
}
返回true;
}
公共配方getRecipe(字符串用户名){
如果(用户名==null){
返回null;
}
List recipes=recipeDao.getRecipe(用户名);
if(recipes.size()==0){
返回null;
}
返回配方。获取(0);
}
公共无效保存或更新(配方){
System.out.println(“保存或更新/服务中”);
recipeDao.saveOrUpdate(配方);
}
公共无效删除(int-id){
recipeDao.delete(id);
}
}

这是我的复课

@Transactional
@Repository
@Component("recipeDao")
public class RecipeDAO {

    @Autowired
    private SessionFactory sessionFactory;


    public Session session() {
        return sessionFactory.getCurrentSession();

    }


    @SuppressWarnings("unchecked")
    public List<Recipe> getRecipe() {

        System.out.println("In the get recipe, Dao");
        Criteria crit = session().createCriteria(Recipe.class);
        crit.createAlias("user", "u").add(Restrictions.eq("u.enabled", true));

        System.out.println("In the get recipe, Dao2");
        return crit.list();
    }

    @SuppressWarnings("unchecked")
    public List<Recipe> getRecipe(String username) {

        System.out.println("In the get recipe, Dao with username");
        Criteria crit = session().createCriteria(Recipe.class);
        crit.createAlias("user", "u");
        crit.add(Restrictions.eq("u.enabled", true));
        crit.add(Restrictions.eq("u.username", username));

        System.out.println("In the get recipe, Dao with username2");
        return crit.list();
    }

    public void saveOrUpdate(Recipe recipe) {

        System.out.println("in the save session " + recipe.toString());
        session().saveOrUpdate(recipe);

    }

    public boolean delete(int id) {
        Query query = session().createQuery("delete from Recipe where id=:id");
        query.setLong("id", id);
        return query.executeUpdate() == 1;
    }

    public Recipe getRecipe(int id) {

        Criteria crit = session().createCriteria(Recipe.class);
        crit.createAlias("user", "u");
        crit.add(Restrictions.eq("u.enabled", true));
        crit.add(Restrictions.idEq(id));
        return (Recipe) crit.uniqueResult();
    }

}
@Transactional
@存储库
@组件(“recipeDao”)
公务舱{
@自动连线
私人会话工厂会话工厂;
公开会议{
返回sessionFactory.getCurrentSession();
}
@抑制警告(“未选中”)
公共列表getRecipe(){
System.out.println(“在获取配方中,Dao”);
Criteria crit=session().createCriteria(Recipe.class);
crit.createAlias(“用户”,“u”).add(Restrictions.eq(“u.enabled”,true));
System.out.println(“在获取配方中,Dao2”);
返回crit.list();
}
@抑制警告(“未选中”)
公共列表getRecipe(字符串用户名){
System.out.println(“在获取配方中,使用用户名的Dao”);
Criteria crit=session().createCriteria(Recipe.class);
createAlias(“用户”、“u”);
标准添加(限制条件(u.enabled,true));
标准添加(Restrictions.eq(“u.username”,username));
System.out.println(“在获取配方中,使用用户名2的Dao”);
返回crit.list();
}
公共无效保存或更新(配方){
System.out.println(“在保存会话中”+recipe.toString());
会话().saveOrUpdate(配方);
}
公共布尔删除(int-id){
Query Query=session().createQuery(“从配方中删除,其中id=:id”);
query.setLong(“id”,id);
返回query.executeUpdate()==1;
}
公共配方getRecipe(int-id){
Criteria crit=session().createCriteria(Recipe.class);
createAlias(“用户”、“u”);
标准添加(限制条件(u.enabled,true));
标准添加(限制idEq(id));
返回(配方)crit.uniqueResult();
}
}
这是我的用户类

@Entity
@Table(name = "user")
public class User {

    @Id
    @NotBlank(groups = {FormValidationGroup.class, PersistenceValidationGroup.class })
    @Size(min = 5, max = 20, groups = {FormValidationGroup.class, PersistenceValidationGroup.class })
    private String username;

    @NotBlank(groups = {FormValidationGroup.class, PersistenceValidationGroup.class })
    @Email(message = "This is an invalid email address", groups = {FormValidationGroup.class,PersistenceValidationGroup.class })
    private String email;

    @NotBlank(groups = {FormValidationGroup.class, PersistenceValidationGroup.class })
    @Size(min = 3, max = 15, groups = {FormValidationGroup.class })
    private String password;

    private boolean enabled = false;
    private String authority;

    public User() {

    }

    public User(String username, String email, String password, boolean enabled, String authority,
            List<Recipe> recipe) {
        super();
        this.username = username;
        this.email = email;
        this.password = password;
        this.enabled = enabled;
        this.authority = authority;

    }

    public boolean isEnabled() {
        return enabled;
    }

    public void setEnabled(boolean enabled) {
        this.enabled = enabled;
    }

    public String getAuthority() {
        return authority;
    }

    public void setAuthority(String authority) {
        this.authority = authority;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }



    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }

    @Override
    public int hashCode() {
        final int prime = 31;
        int result = 1;
        result = prime * result + ((authority == null) ? 0 : authority.hashCode());
        result = prime * result + ((email == null) ? 0 : email.hashCode());
        result = prime * result + (enabled ? 1231 : 1237);
        result = prime * result + ((password == null) ? 0 : password.hashCode());
        result = prime * result + ((username == null) ? 0 : username.hashCode());
        return result;
    }

    @Override
    public boolean equals(Object obj) {
        if (this == obj)
            return true;
        if (obj == null)
            return false;
        if (getClass() != obj.getClass())
            return false;
        User other = (User) obj;
        if (authority == null) {
            if (other.authority != null)
                return false;
        } else if (!authority.equals(other.authority))
            return false;
        if (email == null) {
            if (other.email != null)
                return false;
        } else if (!email.equals(other.email))
            return false;
        if (enabled != other.enabled)
            return false;
        if (password == null) {
            if (other.password != null)
                return false;
        } else if (!password.equals(other.password))
            return false;
        if (username == null) {
            if (other.username != null)
                return false;
        } else if (!username.equals(other.username))
            return false;
        return true;
    }

    @Override
    public String toString() {
        return "User [ username=" + username + ", email=" + email + ", enabled=" + enabled
                + ", authority=" + authority + "]";
    }

}
@实体
@表(name=“user”)
公共类用户{
@身份证
@NotBlank(组={FormValidationGroup.class,PersistenceValidationGroup.class})
@大小(最小值=5,最大值=20,组={FormValidationGroup.class,PersistenceValidationGroup.class})
私有字符串用户名;
@NotBlank(组={FormValidationGroup.class,PersistenceValidationGroup.class})
@电子邮件(message=“这是一个无效的电子邮件地址”,groups={FormValidationGroup.class,PersistenceValidationGroup.class})
私人字符串电子邮件;
@NotBlank(组={FormValidationGroup.class,PersistenceValidationGroup.class})
@大小(最小值=3,最大值=15,组={FormValidationGroup.class})
私有字符串密码;
启用私有布尔值=false;
私人字符串管理机构;
公共用户(){
}
公共用户(字符串用户名、字符串电子邮件、字符串密码、启用布尔值、字符串权限、,
列表(配方){
超级();
this.username=用户名;
this.email=电子邮件;
this.password=密码;
this.enabled=已启用;
这个。权威=权威;
}
公共布尔值isEnabled(){
返回启用;
}
已启用公共void集(已启用布尔值){
this.enabled=已启用;
}
公共字符串getAuthority(){
返回权限;
}
公共权限(字符串权限){
这个。权威=权威;
}
公共字符串getPassword(){
返回密码;
}
public void setPassword(字符串密码){
this.password=密码;
}
公共字符串getUsername(){
返回用户名;
}
public void setUsername(字符串用户名){
this.username=用户名;
}
公共字符串getEmail(){
回复邮件;
}
公用电子邮件(字符串电子邮件){
this.email=电子邮件;
}
@凌驾
公共int hashCode(){
最终整数素数=31;
int结果=1;
result=prime*result+((authority==null)?0:authority.hashCode();
result=prime*result+((email==null)?0:email.hashCode();
结果=素数*结果+(启用?1231:1237);
result=prime*result+((密码==null)?0:password.hashCode();
result=prime*result+((username==null)?0:username.hashCode();
返回结果;
}
@凌驾
公共布尔等于(对象obj){
if(this==obj)
返回true;
@Entity
@Table(name = "user")
public class User {

    @Id
    @NotBlank(groups = {FormValidationGroup.class, PersistenceValidationGroup.class })
    @Size(min = 5, max = 20, groups = {FormValidationGroup.class, PersistenceValidationGroup.class })
    private String username;

    @NotBlank(groups = {FormValidationGroup.class, PersistenceValidationGroup.class })
    @Email(message = "This is an invalid email address", groups = {FormValidationGroup.class,PersistenceValidationGroup.class })
    private String email;

    @NotBlank(groups = {FormValidationGroup.class, PersistenceValidationGroup.class })
    @Size(min = 3, max = 15, groups = {FormValidationGroup.class })
    private String password;

    private boolean enabled = false;
    private String authority;

    public User() {

    }

    public User(String username, String email, String password, boolean enabled, String authority,
            List<Recipe> recipe) {
        super();
        this.username = username;
        this.email = email;
        this.password = password;
        this.enabled = enabled;
        this.authority = authority;

    }

    public boolean isEnabled() {
        return enabled;
    }

    public void setEnabled(boolean enabled) {
        this.enabled = enabled;
    }

    public String getAuthority() {
        return authority;
    }

    public void setAuthority(String authority) {
        this.authority = authority;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }



    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }

    @Override
    public int hashCode() {
        final int prime = 31;
        int result = 1;
        result = prime * result + ((authority == null) ? 0 : authority.hashCode());
        result = prime * result + ((email == null) ? 0 : email.hashCode());
        result = prime * result + (enabled ? 1231 : 1237);
        result = prime * result + ((password == null) ? 0 : password.hashCode());
        result = prime * result + ((username == null) ? 0 : username.hashCode());
        return result;
    }

    @Override
    public boolean equals(Object obj) {
        if (this == obj)
            return true;
        if (obj == null)
            return false;
        if (getClass() != obj.getClass())
            return false;
        User other = (User) obj;
        if (authority == null) {
            if (other.authority != null)
                return false;
        } else if (!authority.equals(other.authority))
            return false;
        if (email == null) {
            if (other.email != null)
                return false;
        } else if (!email.equals(other.email))
            return false;
        if (enabled != other.enabled)
            return false;
        if (password == null) {
            if (other.password != null)
                return false;
        } else if (!password.equals(other.password))
            return false;
        if (username == null) {
            if (other.username != null)
                return false;
        } else if (!username.equals(other.username))
            return false;
        return true;
    }

    @Override
    public String toString() {
        return "User [ username=" + username + ", email=" + email + ", enabled=" + enabled
                + ", authority=" + authority + "]";
    }

}
@Controller
public class RecipeController {


    private RecipeService recipeService;

    @Autowired
    public void setRecipeService(RecipeService recipeService) {
        this.recipeService = recipeService;
    }


    @RequestMapping("/allrecipes")
    public String showRecipe(Model model) {

        List<Recipe> recipe = recipeService.getCurrent();

        model.addAttribute("recipe", recipe);

        return "allrecipes";
    }



    @RequestMapping("/createrecipe")
    public String createRecipe(Model model, Principal principal) {

        System.out.println("in the create recipe");
        Recipe recipe = null;
        if (principal != null) {
            String username = principal.getName();
            System.out.println("in the create recipe, principal not null");
            recipe = recipeService.getRecipe(username);
        }

        if (recipe == null) {

            System.out.println("in the create recipe,new recipe");
            recipe = new Recipe();
        }

        System.out.println("in the create recipe: " + recipe);

        model.addAttribute("recipe",recipe);// command name in the form,
                                                    // must have an recipe
                                                    // object
        System.out.println("in the create recipe:2 " + recipe);
        return "createrecipe";
    }

    @RequestMapping(value = "/docreate", method = RequestMethod.POST)
    public String doCreate(Model model, @Validated(value=FormValidationGroup.class) Recipe recipe, 
            BindingResult result, Principal principal,
            @RequestParam(value = "delete", required = false) String delete) {

        if (result.hasErrors()) {   
            return "createrecipe";
        }

        if (delete == null) {
            String username = principal.getName();
            recipe.getUser().setUsername(username);
            System.out.println("in the docreate");
            recipeService.saveOrUpdate(recipe);
            return "recipecreated";
        } else {
            recipeService.delete(recipe.getId());
            return "recipedeleted";
        }

    }

}
groups = {FormValidationGroup.class, PersistenceValidationGroup.class}