Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.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
Java 多通关系实体中的非必填字段_Java_Hibernate_Jpa_Entity - Fatal编程技术网

Java 多通关系实体中的非必填字段

Java 多通关系实体中的非必填字段,java,hibernate,jpa,entity,Java,Hibernate,Jpa,Entity,我有IP班。此类参数之一是用户类 我想有用户和ip之间的关系。 我想添加与用户相关的实体ip,但表单中不需要用户实体。所以我应该能够添加不与用户相关的IP实体(在用户外键列的IP表的db中应该为null) 我如何在Hibernate/jpa中实现这一点 我的Ip等级: @Entity public class Ip { /** The id. */ @Id @GeneratedValue(strategy = GenerationType.IDENTITY) public Long id;

我有IP班。此类参数之一是用户类

我想有用户和ip之间的关系。 我想添加与用户相关的实体ip,但表单中不需要用户实体。所以我应该能够添加不与用户相关的IP实体(在用户外键列的IP表的db中应该为null)

我如何在Hibernate/jpa中实现这一点

我的Ip等级:

@Entity
public class Ip {

/** The id. */
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
public Long id;

@Column(length = 50)
@Constraints.Required
public String address;

@ManyToOne(optional = true,cascade = CascadeType.ALL)
public User user;

// other code //
}

和用户类:

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

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    public Long id;

    @Constraints.Required
    public String email;

    @Constraints.Required
    public String password;

    @ManyToOne(cascade = CascadeType.PERSIST)
    @Constraints.Required
    public Customer customer;

    @ManyToOne(cascade=CascadeType.MERGE)
    public Department department;

    @ManyToMany(cascade = CascadeType.PERSIST)
    public List<Role> role;

    @Constraints.Required
    public boolean system;

    @Constraints.Required
    public boolean active;
}
我得到一个错误:

play.api.Application$$anon$1: Execution exception[[ConstraintViolationException: Validation failed for classes [models.User] during persist time for groups [javax.validation.groups.Default, ]
List of constraint violations:[
        ConstraintViolationImpl{interpolatedMessage='error.required', propertyPath=customer, rootBeanClass=class models.User, messageTemplate='error.required'}
        ConstraintViolationImpl{interpolatedMessage='error.required', propertyPath=email, rootBeanClass=class models.User, messageTemplate='error.required'}
        ConstraintViolationImpl{interpolatedMessage='error.required', propertyPath=password, rootBeanClass=class models.User, messageTemplate='error.required'}
]]]
        at play.api.Application$class.handleError(Application.scala:293) ~[play_2.10.jar:2.2.4]
        at play.api.DefaultApplication.handleError(Application.scala:399) [play_2.10.jar:2.2.4]
        at play.core.server.netty.PlayDefaultUpstreamHandler$$anonfun$3$$anonfun$applyOrElse$3.apply(PlayDefaultUpstreamHandler.scala:264) [play_2.10.jar:2.2.4]
        at play.core.server.netty.PlayDefaultUpstreamHandler$$anonfun$3$$anonfun$applyOrElse$3.apply(PlayDefaultUpstreamHandler.scala:264) [play_2.10.jar:2.2.4]
        at scala.Option.map(Option.scala:145) [scala-library.jar:na]
        at play.core.server.netty.PlayDefaultUpstreamHandler$$anonfun$3.applyOrElse(PlayDefaultUpstreamHandler.scala:264) [play_2.10.jar:2.2.4]
Caused by: javax.validation.ConstraintViolationException: Validation failed for classes [models.User] during persist time for groups [javax.validation.groups.Default, ]
List of constraint violations:[
        ConstraintViolationImpl{interpolatedMessage='error.required', propertyPath=customer, rootBeanClass=class models.User, messageTemplate='error.required'}
        ConstraintViolationImpl{interpolatedMessage='error.required', propertyPath=email, rootBeanClass=class models.User, messageTemplate='error.required'}
        ConstraintViolationImpl{interpolatedMessage='error.required', propertyPath=password, rootBeanClass=class models.User, messageTemplate='error.required'}
]
        at org.hibernate.cfg.beanvalidation.BeanValidationEventListener.validate(BeanValidationEventListener.java:161) ~[hibernate-core-3.6.9.Final.jar:3.6.9.Final]
        at org.hibernate.cfg.beanvalidation.BeanValidationEventListener.onPreInsert(BeanValidationEventListener.java:94) ~[hibernate-core-3.6.9.Final.jar:3.6.9.Final]
        at org.hibernate.action.EntityIdentityInsertAction.preInsert(EntityIdentityInsertAction.java:160) ~[hibernate-core-3.6.9.Final.jar:3.6.9.Final]
        at org.hibernate.action.EntityIdentityInsertAction.execute(EntityIdentityInsertAction.java:65) ~[hibernate-core-3.6.9.Final.jar:3.6.9.Final]
        at org.hibernate.engine.ActionQueue.execute(ActionQueue.java:273) ~[hibernate-core-3.6.9.Final.jar:3.6.9.Final]
        at org.hibernate.event.def.AbstractSaveEventListener.performSaveOrReplicate(AbstractSaveEventListener.java:320) ~[hibernate-core-3.6.9.Final.jar:3.6.9.Final]
和mysql数据库结构

#   Name    Type    Collation   Attributes  Null    Default
1   id  bigint(20)          No  None    AUTO_INCREMENT
2   address varchar(50) utf8_general_ci     Yes NULL
3   user_id bigint(20)          Yes NULL    

请帮助

您是否检查了数据库中是否存在任何约束?另一种猜测是列表为null,字段不允许为null。初始化列表或提供允许为空的批注。您所说的
非必填字段是什么意思?你的意思是说,你不想把它添加到数据库或其他什么东西中?我的意思是像使用annotation@Column(nullable=true)一样,什么时候发生异常?在保持Ip的同时?用户对象是否由您使用的框架隐式创建?映射和附加的代码似乎正常。在持久化IP实体时发生异常
#   Name    Type    Collation   Attributes  Null    Default
1   id  bigint(20)          No  None    AUTO_INCREMENT
2   address varchar(50) utf8_general_ci     Yes NULL
3   user_id bigint(20)          Yes NULL