eclipse4.5.2报错,但编译运行都无错,请大侠们帮我看看怎么回事?

时间:2021-12-24 17:44:50
这是我项目升级时碰到的问题,
我曾经在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,下面这个文件报错,但编译运行却都没有问题,不知道为什么会报错,虽然不影响运行,但看着不舒服。
先看图
eclipse4.5.2报错,但编译运行都无错,请大侠们帮我看看怎么回事?
文件是这样的

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出问题

#2


遇到过这样的问题,找个@注解删掉保存一下,然后ctrl+z再保存,问题解决

#3


引用 1 楼 Q80470101 的回复:
三种可能
1. jdk版本配置不会
2. 缺少包
3. build path出问题

JDK配置的都是1.8,这个没错;
并不缺包,因为提示的不是找不到,而是说我这个泛型不是个entity;
build path出问题是指哪方面问题
这个项目原来都是正常的,而且,只是提示错误,编译和运行都没问题。继承该类的子类也都运转正常,功能也可以正常使用。

#4


引用 2 楼 qnmdcsdn 的回复:
遇到过这样的问题,找个@注解删掉保存一下,然后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
其他的相应都升级了。

#6


高我的脾气,就屏蔽掉

#7


引用 4 楼 YYZhQ 的回复:
Quote: 引用 2 楼 qnmdcsdn 的回复:

遇到过这样的问题,找个@注解删掉保存一下,然后ctrl+z再保存,问题解决

这个方法试过无数次了,包括我换了不同版本删掉重新导入,都不行。

那就不清楚了,我之前遇到一次就那么解决了

#8


eclipse4.5.2报错,但编译运行都无错,请大侠们帮我看看怎么回事?
这个jdk版本,你选的是几?1.4?
改成最大的版本号。

#9


引用 8 楼 Q80470101 的回复:
eclipse4.5.2报错,但编译运行都无错,请大侠们帮我看看怎么回事?
这个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是选中的,如图。
eclipse4.5.2报错,但编译运行都无错,请大侠们帮我看看怎么回事?
当选中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),然后就不再会显示这个错误了,如图。
eclipse4.5.2报错,但编译运行都无错,请大侠们帮我看看怎么回事?
当然这样也有一个不好之处,就是其它情况下的这种错误,也不报错了。那我程序中的这个错误究竟是我写法有问题,还是JPA验证没有考虑到这个情况,就不得而知了。
选中这个JPA有什么用呢?看一下下面这篇文章,可能会有所启发,可惜我不是这样用的。而且我也不知道,我这种包含泛型的写法,能不能适用这种方法,等有时间再测试一下吧。
http://my.oschina.net/hcliu/blog/401262

#1


三种可能
1. jdk版本配置不会
2. 缺少包
3. build path出问题

#2


遇到过这样的问题,找个@注解删掉保存一下,然后ctrl+z再保存,问题解决

#3


引用 1 楼 Q80470101 的回复:
三种可能
1. jdk版本配置不会
2. 缺少包
3. build path出问题

JDK配置的都是1.8,这个没错;
并不缺包,因为提示的不是找不到,而是说我这个泛型不是个entity;
build path出问题是指哪方面问题
这个项目原来都是正常的,而且,只是提示错误,编译和运行都没问题。继承该类的子类也都运转正常,功能也可以正常使用。

#4


引用 2 楼 qnmdcsdn 的回复:
遇到过这样的问题,找个@注解删掉保存一下,然后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
其他的相应都升级了。

#6


高我的脾气,就屏蔽掉

#7


引用 4 楼 YYZhQ 的回复:
Quote: 引用 2 楼 qnmdcsdn 的回复:

遇到过这样的问题,找个@注解删掉保存一下,然后ctrl+z再保存,问题解决

这个方法试过无数次了,包括我换了不同版本删掉重新导入,都不行。

那就不清楚了,我之前遇到一次就那么解决了

#8


eclipse4.5.2报错,但编译运行都无错,请大侠们帮我看看怎么回事?
这个jdk版本,你选的是几?1.4?
改成最大的版本号。

#9


引用 8 楼 Q80470101 的回复:
eclipse4.5.2报错,但编译运行都无错,请大侠们帮我看看怎么回事?
这个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是选中的,如图。
eclipse4.5.2报错,但编译运行都无错,请大侠们帮我看看怎么回事?
当选中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),然后就不再会显示这个错误了,如图。
eclipse4.5.2报错,但编译运行都无错,请大侠们帮我看看怎么回事?
当然这样也有一个不好之处,就是其它情况下的这种错误,也不报错了。那我程序中的这个错误究竟是我写法有问题,还是JPA验证没有考虑到这个情况,就不得而知了。
选中这个JPA有什么用呢?看一下下面这篇文章,可能会有所启发,可惜我不是这样用的。而且我也不知道,我这种包含泛型的写法,能不能适用这种方法,等有时间再测试一下吧。
http://my.oschina.net/hcliu/blog/401262