Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.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 EJB3-@列(可插入=“假”)问题_Java_Jpa_Ejb 3.0_Toplink Essentials_Ora 01400 - Fatal编程技术网

Java EJB3-@列(可插入=“假”)问题

Java EJB3-@列(可插入=“假”)问题,java,jpa,ejb-3.0,toplink-essentials,ora-01400,Java,Jpa,Ejb 3.0,Toplink Essentials,Ora 01400,我正在用EJB3和Oracle Express Edition数据库构建一个J2SE应用程序 我的问题是这样的——我在项目中设置了一个EntityBean,它与数据库中的一个表相匹配。该表包含一个不可为空的列,该列具有默认值。我想要的是,当使用EJB将新数据持久化到此表时,列的值将获得其默认值。我在项目中是这样设置的: //holds user's first name @Basic(optional = true) @Column(name = "FIRST_NAME", insertable

我正在用EJB3和Oracle Express Edition数据库构建一个J2SE应用程序

我的问题是这样的——我在项目中设置了一个EntityBean,它与数据库中的一个表相匹配。该表包含一个不可为空的列,该列具有默认值。我想要的是,当使用EJB将新数据持久化到此表时,列的值将获得其默认值。我在项目中是这样设置的:

//holds user's first name
@Basic(optional = true)
@Column(name = "FIRST_NAME", insertable = false, updatable = true, nullable = false)
private String m_firstName;
我还在ORM.XML文件中设置了它:

    <basic name="firstName">
        <column name="FIRST_NAME" insertable="false" updatable="true" nullable="false"/>
    </basic>
这意味着持久性管理器尝试插入firstname字段,尽管我告诉它不要这样做

我做错什么了吗


谢谢

您可以在不使用
@Basic(optional=true)
的情况下进行尝试,因为to
可为null
(在您的情况下,这似乎是错误的)

定义字段或属性的值是否可以为null


带有以下注释:

@Basic(optional = false)
@Column(name = "FIRST_NAME", insertable = false, updatable = true, nullable = false)
private String m_firstName;
生成SQL插入时,
FIRST\u NAME
列肯定应该被忽略。换句话说,这听起来像是GlassFish社区开发的TopLink Essentials中的一个bug。实际上,我认为这个问题在(“Column annotation insertable=false仅在与Updateable=false一起使用时有效”)中有报告。遗憾的是,它不是固定的,所以我建议:

  • 使用私有字符串m_firstName=“我的数据库默认值”(是的,这很难看)-或者-
  • 更改持久性提供程序(对于OpenJPA,Hibenate)

尝试将这样的东西添加到实体类中。 这意味着在Hibernate的SQL中排除null属性值

@Entity
@Table(name = "your_table")
@org.hibernate.annotations.Entity(
  dynamicInsert = true
)
public class YourClass{


}

TopLink Essentials仅在insertable和updateable都为false时才会省略该列

这是固定在EclipseLink的,所以你应该考虑升级。

@Entity
@Table(name = "your_table")
@org.hibernate.annotations.Entity(
  dynamicInsert = true
)
public class YourClass{


}