Jpa 为什么赢了';当使用createNativeQuery时,我的EJB实体不能使用非关系表吗?
我正在尝试将实体与MySQL ndbcluster表一起使用。此表类型不允许外键,但到目前为止,我的实体没有问题 但是,当我尝试使用EntityManager的createNativeQuery方法加载实体时,遇到了一点问题。由于无法做到这一点,我需要使用此方法: 我的MySQL表如下所示: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
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”)
,它会起作用吗?