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
Jpa 为什么赢了';当使用createNativeQuery时,我的EJB实体不能使用非关系表吗?_Jpa_Jpa 2.0 - Fatal编程技术网

Jpa 为什么赢了';当使用createNativeQuery时,我的EJB实体不能使用非关系表吗?

Jpa 为什么赢了';当使用createNativeQuery时,我的EJB实体不能使用非关系表吗?,jpa,jpa-2.0,Jpa,Jpa 2.0,我正在尝试将实体与MySQL ndbcluster表一起使用。此表类型不允许外键,但到目前为止,我的实体没有问题 但是,当我尝试使用EntityManager的createNativeQuery方法加载实体时,遇到了一点问题。由于无法做到这一点,我需要使用此方法: 我的MySQL表如下所示: CREATE TABLE `category` ( `id` SMALLINT(6) NOT NULL AUTO_INCREMENT, `category_id` SMALLINT(6) N

我正在尝试将实体与MySQL ndbcluster表一起使用。此表类型不允许外键,但到目前为止,我的实体没有问题

但是,当我尝试使用EntityManager的createNativeQuery方法加载实体时,遇到了一点问题。由于无法做到这一点,我需要使用此方法:

我的MySQL表如下所示:

CREATE TABLE `category` (
    `id` SMALLINT(6) NOT NULL AUTO_INCREMENT,
    `category_id` SMALLINT(6) NULL DEFAULT NULL,
    PRIMARY KEY (`id`),
    INDEX `category_id` (`category_id`)
)
COLLATE='utf8_general_ci'
ENGINE=ndbcluster
ROW_FORMAT=DEFAULT
@Entity
@Table(name = "category")
public class Category implements Serializable {
    private static final long serialVersionUID = 1L;
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Basic(optional = false)
    @Column(name = "id")
    private Short id;
    @OneToMany(mappedBy = "categoryId")
    private List<Category> categoryList;
    @JoinColumn(name = "category_id", referencedColumnName = "id")
    @ManyToOne
    private Category categoryId;

    public Category() {
    }

    // getters and setters
}
如果我将表引擎更改为innodb,并添加外键,createNativeQuery方法可以正常工作

我的实体类如下所示:

CREATE TABLE `category` (
    `id` SMALLINT(6) NOT NULL AUTO_INCREMENT,
    `category_id` SMALLINT(6) NULL DEFAULT NULL,
    PRIMARY KEY (`id`),
    INDEX `category_id` (`category_id`)
)
COLLATE='utf8_general_ci'
ENGINE=ndbcluster
ROW_FORMAT=DEFAULT
@Entity
@Table(name = "category")
public class Category implements Serializable {
    private static final long serialVersionUID = 1L;
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Basic(optional = false)
    @Column(name = "id")
    private Short id;
    @OneToMany(mappedBy = "categoryId")
    private List<Category> categoryList;
    @JoinColumn(name = "category_id", referencedColumnName = "id")
    @ManyToOne
    private Category categoryId;

    public Category() {
    }

    // getters and setters
}
我的表包含1行,其中id=1,category_id=null,因此没有带null值的主键,不管错误怎么说。如果删除该行或将category_id设置为1,则不会出现错误


需要帮助。

通过从EclipseLink(JPA2.0)切换到OpenJPA(JPA2.0)成功实现了这一功能。在EclipseLink 2.3.2和/或GlassFish 3.1.2.2中似乎有一个bug

我在我的另一个项目中使用了EclipseLink(JPA 2.0),使用了稍微不同的版本Netbeans+GlassFish 3.1.1,在该版本中,我对非关系myisam表的实体类使用了createNativeQuery。这从来没有引起任何问题。这一定是一只虫子


但问题解决了。再见,再见EclipseLink,你好OpenJPA。

问题是区分大小写。在MySQL中,您的列“id”将在数据库中定义为“id”,除非您引用它。如果您将映射切换为大写,则应该解决该问题(即“ID”)

您还可以引用列名(“'id'))

或者设置持久性单元属性


“eclipselink.jpa.uppercase column names”=“true”

似乎我在一次测试中犯了一个错误。使用或不使用关系表没有区别。具有设置外键的ndbcluster和innodb都会引发相同的异常。因此,问题似乎是createNativeQuery方法的使用问题。您是说如果我在实体中使用了
@Column(name=“ID”)
,它会起作用吗?