我曾经在eclipse3.6(jdk1.7)里用Spring3+hibernate4+struts2+spring data jpa环境时,没有任何报错,编译运行也成功,
但升级到eclipse4.2.5,jdk1.8,架构用的是Spring4.2.5+hibernate5.1.0+struts2+spring data jpa,下面这个文件报错,但编译运行却都没有问题,不知道为什么会报错,虽然不影响运行,但看着不舒服。
先看图
文件是这样的
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.MappedSuperclass;
import javax.persistence.OneToMany;
import javax.persistence.OrderBy;
import javax.persistence.Transient;
import com.huizhiyida._msshje.base.utils.FieldValues;
@MappedSuperclass
public abstract class TreeEntity<T extends TreeNodeEntity<?>, TGroup extends TreeEntity<T, TGroup>> extends BaseEntity {
protected String name;
protected Integer orderindex = 0;
protected TGroup parent;
protected List<TGroup> children = new ArrayList<TGroup>();
protected List<T> nodes = new ArrayList<T>();
@ManyToOne
@JoinColumn(name = "parent_id")
public TGroup getParent() {
return parent;
}
public void setParent(TGroup parent) {
this.parent = parent;
}
@OneToMany(mappedBy = "parent")
@OrderBy("id")
public List<TGroup> getChildren() {
return children;
}
public void setChildren(List<TGroup> children) {
this.children = children;
}
@OneToMany(mappedBy = "group")
public List<T> getNodes() {
return nodes;
}
public void setNodes(List<T> nodes) {
this.nodes = nodes;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getOrderindex() {
return orderindex;
}
public void setOrderindex(Integer orderindex) {
this.orderindex = orderindex;
}
}
这个问题我连描述都不知道怎么描述了,希望有人能帮我解决。或者告诉我到什么地方找解决方案。
我在eclipse官网上不知道为什么注册不上。
12 个解决方案
#1
三种可能
1. jdk版本配置不会
2. 缺少包
3. build path出问题
1. jdk版本配置不会
2. 缺少包
3. build path出问题
#2
遇到过这样的问题,找个@注解删掉保存一下,然后ctrl+z再保存,问题解决
#3
JDK配置的都是1.8,这个没错;
并不缺包,因为提示的不是找不到,而是说我这个泛型不是个entity;
build path出问题是指哪方面问题
这个项目原来都是正常的,而且,只是提示错误,编译和运行都没问题。继承该类的子类也都运转正常,功能也可以正常使用。
#4
这个方法试过无数次了,包括我换了不同版本删掉重新导入,都不行。
#5
现在能确定不是eclipse版本的问题,因为我换了不同的eclipse版本,都出这个问题。
也不是jdk的问题,我换回到原来用的eclipse版本,且用原来的jdk1.7,重新导入这个项目,依然报这样的错误。
那就应该是我升级maven和maven依赖包的问题了。
maven:3.0.4-->3.3.9
spring:3.2.1-->4.2.5
hibernate:4.1.10-->5.1.0
其他的相应都升级了。
也不是jdk的问题,我换回到原来用的eclipse版本,且用原来的jdk1.7,重新导入这个项目,依然报这样的错误。
那就应该是我升级maven和maven依赖包的问题了。
maven:3.0.4-->3.3.9
spring:3.2.1-->4.2.5
hibernate:4.1.10-->5.1.0
其他的相应都升级了。
#6
高我的脾气,就屏蔽掉
#7
那就不清楚了,我之前遇到一次就那么解决了
#8
这个jdk版本,你选的是几?1.4?
改成最大的版本号。
#9
这个jdk版本,你选的是几?1.4?
改成最大的版本号。
从你的提示来看,也不是这个问题。。。。忽视此回复
#10
我又错了,我把另一个项目在原来的eclipse下升级了hibernate和spring,在原来的eclipse(最高jdk1.7)下没有问题,但把这个项目切出来,删掉所有项目信息,导入到4.5的eclipse(jdk1.8)下,就开始报错,看来还是环境的问题。
#11
基本可以确定是环境问题,我把eclipse4.5下的项目,去掉project相关信息,只留原码后,导入到eclipse3.2中,一切正常,不报错;将eclipse3.2中的项目只留源码导入到eclipse4.5下,同样的地方会报错。可能是eclipse4.5下对JPA的检查严格了,我试了一下,去掉windows-->preferences-->validation里的JPA Validator的build选项,会不显示错误,但实际上,在eclipse3.2中这个选项是选中的,我也试着将其里面的详细条目一条一条删除测试,但没有作用,也不知道是怎么回事。我想可能是eclipse4.5所用的JPA检验插件进行了更严格的检测,但是这不知道算不算一个BUG,因为很多检测出来的错误其实是不影响编译和运行的。其实还有其它错误,我有一个实体类某个属性上的mappedby也报错,而这个类里有我定义的不与数据库关联的属性及其get和set方法上都标注了@Transient,我把标注在属性上的@Transient去掉,就不报错了。这不是很奇怪的事情吗?可惜的是,我始终注册不上eclipse网站,也登录不上,无法报这个问题上传咨询,有哪位朋友能上去的,能否帮我问问呢?
#12
经过我不懈且神经质的努力,终于解决了,可能理解的不太对,所以下面的说法未必正确,但我解决的方法确实是这样,希望高手指正我的错误,因为我确实对很多东西都理解不深,仅仅拿来用而已。
原来的项目导入到eclipse3.2中的时候,查看项目properties-->project Facets,这时默认不不选中JPA的,而在4.5.2中的时候,JPA是选中的,如图。
当选中JPA项目时,就会用JPA的规则进行验证,所以就会报错,即使是在3.2中,只要选中了JPA,也会报错。因为我的文件里用的是泛型,在实际运行时,泛型对应的关系可以转化为实际对应的实体,但是在此之前,它确实不是一个entity,因为它是一个继承于abstract类的泛型,不可能实体化。所以JPA的校验一定会报错,要关掉这个错误,可以选择在项目properties-->JPA(注意,project Facets中选中JPA,才会显示此项)-->Error/Warnnings中,选中Enable project spacific settings,以单独对这个项目编辑报错项,然后展开Attribute,将下面的Target entity is not an entity由Error改成其它(我改成了Info),然后就不再会显示这个错误了,如图。
当然这样也有一个不好之处,就是其它情况下的这种错误,也不报错了。那我程序中的这个错误究竟是我写法有问题,还是JPA验证没有考虑到这个情况,就不得而知了。
选中这个JPA有什么用呢?看一下下面这篇文章,可能会有所启发,可惜我不是这样用的。而且我也不知道,我这种包含泛型的写法,能不能适用这种方法,等有时间再测试一下吧。
http://my.oschina.net/hcliu/blog/401262
原来的项目导入到eclipse3.2中的时候,查看项目properties-->project Facets,这时默认不不选中JPA的,而在4.5.2中的时候,JPA是选中的,如图。
当选中JPA项目时,就会用JPA的规则进行验证,所以就会报错,即使是在3.2中,只要选中了JPA,也会报错。因为我的文件里用的是泛型,在实际运行时,泛型对应的关系可以转化为实际对应的实体,但是在此之前,它确实不是一个entity,因为它是一个继承于abstract类的泛型,不可能实体化。所以JPA的校验一定会报错,要关掉这个错误,可以选择在项目properties-->JPA(注意,project Facets中选中JPA,才会显示此项)-->Error/Warnnings中,选中Enable project spacific settings,以单独对这个项目编辑报错项,然后展开Attribute,将下面的Target entity is not an entity由Error改成其它(我改成了Info),然后就不再会显示这个错误了,如图。
当然这样也有一个不好之处,就是其它情况下的这种错误,也不报错了。那我程序中的这个错误究竟是我写法有问题,还是JPA验证没有考虑到这个情况,就不得而知了。
选中这个JPA有什么用呢?看一下下面这篇文章,可能会有所启发,可惜我不是这样用的。而且我也不知道,我这种包含泛型的写法,能不能适用这种方法,等有时间再测试一下吧。
http://my.oschina.net/hcliu/blog/401262
#1
三种可能
1. jdk版本配置不会
2. 缺少包
3. build path出问题
1. jdk版本配置不会
2. 缺少包
3. build path出问题
#2
遇到过这样的问题,找个@注解删掉保存一下,然后ctrl+z再保存,问题解决
#3
三种可能
1. jdk版本配置不会
2. 缺少包
3. build path出问题
JDK配置的都是1.8,这个没错;
并不缺包,因为提示的不是找不到,而是说我这个泛型不是个entity;
build path出问题是指哪方面问题
这个项目原来都是正常的,而且,只是提示错误,编译和运行都没问题。继承该类的子类也都运转正常,功能也可以正常使用。
#4
遇到过这样的问题,找个@注解删掉保存一下,然后ctrl+z再保存,问题解决
这个方法试过无数次了,包括我换了不同版本删掉重新导入,都不行。
#5
现在能确定不是eclipse版本的问题,因为我换了不同的eclipse版本,都出这个问题。
也不是jdk的问题,我换回到原来用的eclipse版本,且用原来的jdk1.7,重新导入这个项目,依然报这样的错误。
那就应该是我升级maven和maven依赖包的问题了。
maven:3.0.4-->3.3.9
spring:3.2.1-->4.2.5
hibernate:4.1.10-->5.1.0
其他的相应都升级了。
也不是jdk的问题,我换回到原来用的eclipse版本,且用原来的jdk1.7,重新导入这个项目,依然报这样的错误。
那就应该是我升级maven和maven依赖包的问题了。
maven:3.0.4-->3.3.9
spring:3.2.1-->4.2.5
hibernate:4.1.10-->5.1.0
其他的相应都升级了。
#6
高我的脾气,就屏蔽掉
#7
遇到过这样的问题,找个@注解删掉保存一下,然后ctrl+z再保存,问题解决
这个方法试过无数次了,包括我换了不同版本删掉重新导入,都不行。
那就不清楚了,我之前遇到一次就那么解决了
#8
这个jdk版本,你选的是几?1.4?
改成最大的版本号。
#9
这个jdk版本,你选的是几?1.4?
改成最大的版本号。
从你的提示来看,也不是这个问题。。。。忽视此回复
#10
我又错了,我把另一个项目在原来的eclipse下升级了hibernate和spring,在原来的eclipse(最高jdk1.7)下没有问题,但把这个项目切出来,删掉所有项目信息,导入到4.5的eclipse(jdk1.8)下,就开始报错,看来还是环境的问题。
#11
基本可以确定是环境问题,我把eclipse4.5下的项目,去掉project相关信息,只留原码后,导入到eclipse3.2中,一切正常,不报错;将eclipse3.2中的项目只留源码导入到eclipse4.5下,同样的地方会报错。可能是eclipse4.5下对JPA的检查严格了,我试了一下,去掉windows-->preferences-->validation里的JPA Validator的build选项,会不显示错误,但实际上,在eclipse3.2中这个选项是选中的,我也试着将其里面的详细条目一条一条删除测试,但没有作用,也不知道是怎么回事。我想可能是eclipse4.5所用的JPA检验插件进行了更严格的检测,但是这不知道算不算一个BUG,因为很多检测出来的错误其实是不影响编译和运行的。其实还有其它错误,我有一个实体类某个属性上的mappedby也报错,而这个类里有我定义的不与数据库关联的属性及其get和set方法上都标注了@Transient,我把标注在属性上的@Transient去掉,就不报错了。这不是很奇怪的事情吗?可惜的是,我始终注册不上eclipse网站,也登录不上,无法报这个问题上传咨询,有哪位朋友能上去的,能否帮我问问呢?
#12
经过我不懈且神经质的努力,终于解决了,可能理解的不太对,所以下面的说法未必正确,但我解决的方法确实是这样,希望高手指正我的错误,因为我确实对很多东西都理解不深,仅仅拿来用而已。
原来的项目导入到eclipse3.2中的时候,查看项目properties-->project Facets,这时默认不不选中JPA的,而在4.5.2中的时候,JPA是选中的,如图。
当选中JPA项目时,就会用JPA的规则进行验证,所以就会报错,即使是在3.2中,只要选中了JPA,也会报错。因为我的文件里用的是泛型,在实际运行时,泛型对应的关系可以转化为实际对应的实体,但是在此之前,它确实不是一个entity,因为它是一个继承于abstract类的泛型,不可能实体化。所以JPA的校验一定会报错,要关掉这个错误,可以选择在项目properties-->JPA(注意,project Facets中选中JPA,才会显示此项)-->Error/Warnnings中,选中Enable project spacific settings,以单独对这个项目编辑报错项,然后展开Attribute,将下面的Target entity is not an entity由Error改成其它(我改成了Info),然后就不再会显示这个错误了,如图。
当然这样也有一个不好之处,就是其它情况下的这种错误,也不报错了。那我程序中的这个错误究竟是我写法有问题,还是JPA验证没有考虑到这个情况,就不得而知了。
选中这个JPA有什么用呢?看一下下面这篇文章,可能会有所启发,可惜我不是这样用的。而且我也不知道,我这种包含泛型的写法,能不能适用这种方法,等有时间再测试一下吧。
http://my.oschina.net/hcliu/blog/401262
原来的项目导入到eclipse3.2中的时候,查看项目properties-->project Facets,这时默认不不选中JPA的,而在4.5.2中的时候,JPA是选中的,如图。
当选中JPA项目时,就会用JPA的规则进行验证,所以就会报错,即使是在3.2中,只要选中了JPA,也会报错。因为我的文件里用的是泛型,在实际运行时,泛型对应的关系可以转化为实际对应的实体,但是在此之前,它确实不是一个entity,因为它是一个继承于abstract类的泛型,不可能实体化。所以JPA的校验一定会报错,要关掉这个错误,可以选择在项目properties-->JPA(注意,project Facets中选中JPA,才会显示此项)-->Error/Warnnings中,选中Enable project spacific settings,以单独对这个项目编辑报错项,然后展开Attribute,将下面的Target entity is not an entity由Error改成其它(我改成了Info),然后就不再会显示这个错误了,如图。
当然这样也有一个不好之处,就是其它情况下的这种错误,也不报错了。那我程序中的这个错误究竟是我写法有问题,还是JPA验证没有考虑到这个情况,就不得而知了。
选中这个JPA有什么用呢?看一下下面这篇文章,可能会有所启发,可惜我不是这样用的。而且我也不知道,我这种包含泛型的写法,能不能适用这种方法,等有时间再测试一下吧。
http://my.oschina.net/hcliu/blog/401262