关于Hibernate 查询字段和count(*)的问题

图片说明
这是执行的sql,在mysql中执行能拿到我想要的结果.

图片说明
这是我在mysql中拼接的hql, 拼接出来和上面sql一样,能在mysql中直接执行.
但是在hibernate中会给我报错
图片说明
java.lang.RuntimeException: hql cant auto count .
我推断是因为我实体类没有这个count(*)属性导致的bug
我在网上查说是可以用 new list(需要查询的数据) createQuery(hql).list; 结果还是出现这个异常. hibernate 用的比较少 不知道怎么解决. 求助.

2个回答

hql中查询的属性需要用实体类中定义的属性, 也不能要用表名,而是实体类名

cookie151
cookie151 回复NoMoneyError: 发下面了. 语法问题 不怎么清楚.
2 年多之前 回复
qq_35728177
Tsui丶 回复cookie151: ???
2 年多之前 回复
cookie151
cookie151 回复NoMoneyError: 有个问题想问下你.
2 年多之前 回复
cookie151
cookie151 回复NoMoneyError: 问题找到了,是调用HibernateDao 里面countHqlResult方法出的错. 他里面拼接冲突了,我再跑跑,谢谢了.
2 年多之前 回复
qq_35728177
Tsui丶 回复cookie151: 你找下错误信息有没有cause by
2 年多之前 回复
cookie151
cookie151 还是出这个 java.lang.RuntimeException: hql cant auto count .异常
2 年多之前 回复
cookie151
cookie151 这个搞忘了..我改了试试.
2 年多之前 回复

org.hibernate.hql.ast.QuerySyntaxException: unexpected token: ( near line 1, column 28 [
select count(c.counts)from
(select count(*) as counts
from com.sangame.ds.ws.persistence.model.terminal.TerminalPlayLog WHERE 1 = 1
GROUP BY
itemName,terminal.terminalName,terminal.terminalGroup.id) c
] 我手动拼接的 查询总数的sql 但是说是语法错误.

SELECT count(c.cs)from(
SELECT
count(*) cs FROM
ds_terminal_play_log tp
LEFT JOIN ds_terminal t ON t.id = tp.terminal_id
LEFT JOIN ds_terminal_group tg ON tg.id = t.terminal_group_id
GROUP BY
tp.item_name,
t.terminal_name,
t.terminal_group_id
) c 这样在mysql里面 又是没有问题的..

cookie151
cookie151 回复NoMoneyError: 谢谢!
2 年多之前 回复
qq_35728177
Tsui丶 HQL无法支持from后面跟子查询的方式 http://blog.csdn.net/fableking/article/details/3167081
2 年多之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
hibernate 2.XX,聚合函数count(*)+子查询的问题。
大家好, 想问一下,在hibernate中,使用count(*)+子查询报错了,难道不支持吗? 如果把count(*)換成是具体的字段确是可以的, 我用的是hibernate 2.XXX
Hibernate 查询怎么实现?
我有表:student {id,name,class,age,sex,regiest_time} 其中regiest_time 是Date类型。 我要统计 在同一个年龄段的学生的数目,但是是带有条件的,条件不确定。 sql 应该为:select age,count(age) from student where regiest_time between '2007-10-1' and '2008-1-1' and ....(其中regiest_time 等where的多个条件都是根据用户传来的Student对象中的属性来定的,是不确定的。) group by event_type limit n (其中的 需要统计的字段 age 和 limit 的数量 n 都是根据前台传过来的)。我曾经用hibernate 的Criteria来做,可是根本没有办法做出来。请求各位帮忙,应该怎么用java代码实现啊!谢谢了 [b]问题补充:[/b] 用HQL语句的话,我其他的类的相似方法也就都要改了。而且Criteria在加多条件的时候可以用Examp来做。非常方便。用HQL的话条件还得一个一个加,感觉做的很郁闷(也许是我的HQL菜的缘故,找不到和Criteria的Examp差不多的办法吧)
Hibernate DetachedCriteria 一次排序多字段的结果集。。。。。
select USERS.USERNAME,count(distinct(CHALLENGE.CHALLENGEID))as 'a1', count(distinct(SOLUTION.SOLUTIONID)) as 'a2' ,count(distinct(IDEA.IDEAID)) as 'a3', [color=red]count(distinct(CHALLENGE.CHALLENGEID))+ count(distinct(SOLUTION.SOLUTIONID))+ count(distinct(IDEA.IDEAID)) as 'a4'[/color] from USERS left join CHALLENGE on CHALLENGE.USERID=USERS.USERID left join SOLUTION on SOLUTION.USERID=USERS.USERID left join IDEA on IDEA.USERID=USERS.USERID group by USERS.USERNAME [color=red]order by a4 desc [/color] --网上都是根据一个字段的排序 dc.addOrder(Order.desc(属性名)); 有没有把记录多个字段结果统计起来,在案统计的条目在排序 例如: public class User { .... int count1; int count2; int count3; .... } //把 count1+count2+count3的结果统计起来在排序 使用DetachedCriteria 语法。。。。
hibernate 操作虚表(不是视图)
hibernate中如何操作查询出来的虚表(不是视图),也没有对应的映射文件,就像 我查询表中的不重复记录与不重复的记录数(已经查出)hql语句如下 “SELECT DISTINCT(type) ,COUNT(type) FROM SssjTransient GROUP BY type” type为SssjTransient中的字段
修改hibernate返回的结果集,结果他自动将修改结果更新到数据库中
我在action中通过 Criteria ca = this.getSession().createCriteria(Test.class);查询获得纪录list 根据需求将list里的实体某个字段进行了包装,结果包装完成后他自动将我包装的结果更新到数据库中了,这个问题应该怎么解决 代码如下 if(list!= null){ for(Test test:list){ if(StringUtils.isNotEmpty(test.getStatus())) test.setStatus(StatusEnum.valueOf(test.getStatus()).getValue()); } } 这是后台数据库执行顺序 注:用的分页查询 Hibernate: select * from ? Hibernate: select tuser0_. Hibernate: update TMS_TASK_INFO Hibernate: select count(*) as y0_ from TMS_TASK_INFO this_
HQL多表查询问题
我要查询2个表..两个表的主键相同 但在数据库中没关联 我写的是 from CustTEntity c left outer join SeleCustTEntity s on c.custId=s.custId where c.comingflag=1 好象这样外连接不行 提示on不对 我直接写成 from CustTEntity c SeleCustTEntity s where c.custId=s.custId and c.comingflag=1 报java.lang.NoSuchMethodError 求解 [b]问题补充:[/b] 还是不行 用select c.*,s.* from CustTEntity c ,com.itm.entity.SaleCustTEntity s where c.custId=s.custId and c.comingflag=1 报的错是 是不是2个实体之间没关联的原因 com.itm.entity.SaleCustTEntity is not mapped [select count(*) from com.itm.entity.CustTEntity c ,com.itm.entity.SaleCustTEntity s where c.custId=s.custId and c.comingflag=1]; nested exception is org.hibernate.hql.ast.QuerySyntaxException: com.itm.entity.SaleCustTEntity is not mapped [select count(*) from com.itm.entity.CustTEntity c ,com.itm.entity.SaleCustTEntity s where c.custId=s.custId and c.comingflag=1] [b]问题补充:[/b] 用这个查询select c.*,s.* from CustTEntity c left join com.itm.entity.SaleCustTEntity s on c.custId=s.custId where c.comingflag=1 还是NoSuchMethodError [b]问题补充:[/b] 用sql就麻烦了..调的是别人的工具类 [b]问题补充:[/b] 这个查处来的list的里面是什么? 一个一个的字段? 在往实体里加.. [b]问题补充:[/b] StatementCallback; bad SQL grammar [select * from (select t.*,rownum as rowno from (select c.*,s.* from a_cust_baseinfo c ,a_cust_coming s where c.custId=s.custId and c.comingflag='1' order by c.contactTel desc ) t)where rowno>='1' and rowno<='10']; nested exception is java.sql.SQLException: ORA-00918: 未明确定义列 看看这个错误 [b]问题补充:[/b] 知道什么原因了..两个表有相同的字段复合查询的时候把他给省略了
hql 查询问题
select count(distinct A,B,C)from table,就是在table表中根据ABC三个字段去掉重复后求count。 hql 应该如何 写。
hibernate 多对多 级联删除 注解
有两个类:Survey和Questions,问卷类和题目类,它们是多对多的关系,即:一张试卷可以有多个题目,一个题目可以属于多个试卷,我用两个一对多,数据库用中间表来实现,并有第三个类SurveyQuestions. surveuy类如下: [code="java"]//问卷实体:包括各种属性 @Entity @Table(name="_survey") public class Survey { private int id;// 问卷ID private String name;// 问卷标题 private String des;// 问卷描述或者备注 private boolean state;// 状态:是否开放 private SurveyType surveyType;// 问卷类型 private int count;// 问卷数量限制 private Date createTime;// 问卷创建时间 private Date publishTime;// 问卷发布时间 private Date deadline;// 问卷截止提交日期 private String password;// 问卷访问密码 private boolean grade;//是否是打分问卷 @Id @GeneratedValue public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getDes() { return des; } public void setDes(String des) { this.des = des; } public boolean isState() { return state; } public void setState(boolean state) { this.state = state; } @ManyToOne @JoinColumn(name = "type_id") public SurveyType getSurveyType() { return surveyType; } public void setSurveyType(SurveyType surveyType) { this.surveyType = surveyType; } public int getCount() { return count; } public void setCount(int count) { this.count = count; } public Date getCreateTime() { return createTime; } public void setCreateTime(Date createTime) { this.createTime = createTime; } public Date getPublishTime() { return publishTime; } public void setPublishTime(Date publishTime) { this.publishTime = publishTime; } public Date getDeadline() { return deadline; } public void setDeadline(Date deadline) { this.deadline = deadline; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } public boolean isGrade() { return grade; } public void setGrade(boolean grade) { this.grade = grade; }[/code] questions类 [code="java"]<span></span> @Entity @Table(name="_questions") public class Questions { private int id;// 问题主键ID private QuestionType questionType;// 问题类型 private String head;// 问题题目 private String body;// 问题主体 private String answer;// 预留字段,如果是网上答卷,则是答案 private String remarks;// 预留字段,备注 private int number;// 选项个数 @Id @GeneratedValue public int getId() { return id; } public void setId(int id) { this.id = id; } public String getHead() { return head; } public void setHead(String head) { this.head = head; } public String getBody() { return body; } public void setBody(String body) { this.body = body; } public String getAnswer() { return answer; } public void setAnswer(String answer) { this.answer = answer; } public String getRemarks() { return remarks; } public void setRemarks(String remarks) { this.remarks = remarks; } @ManyToOne(fetch=FetchType.LAZY) @JoinColumn(name = "type_id") public QuestionType getQuestionType() { return questionType; } public void setQuestionType(QuestionType questionType) { this.questionType = questionType; } @Column(nullable = true) public int getNumber() { return number; } public void setNumber(int number) { this.number = number; } }[/code] surveyQuestion类 [code="java"]package com.questionnaire.model; import java.util.Date; import java.util.HashSet; import java.util.Set; import javax.persistence.CascadeType; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.Id; import javax.persistence.JoinColumn; import javax.persistence.ManyToOne; import javax.persistence.OneToMany; import javax.persistence.Table; @Entity @Table(name = "_surveyquestion") public class SurveyQuestion { private int id;// 问卷题库关联表ID,主键 private Survey survey;// 对应问卷ID,外键 private Questions questions;// 对应题目ID,外键 private int number;// 题号,即该题目在本问卷的题号 @Id @GeneratedValue public int getId() { return id; } public void setId(int id) { this.id = id; } this.userIp = userIp; public int getNumber() { return number; } public void setNumber(int number) { this.number = number; } @ManyToOne(cascade = CascadeType.ALL) @JoinColumn(name = "survey_id") public Survey getSurvey() { return survey; } public void setSurvey(Survey survey) { this.survey = survey; } @ManyToOne(cascade = CascadeType.ALL) @JoinColumn(name = "questions_id") public Questions getQuestions() { return questions; } public void setQuestions(Questions questions) { this.questions = questions; } }[/code] 我想实现删除题目时删除_questions表里的数据,同时删除_surveyQuestion表里的数据。当然survey同样?怎样实现呢?
hibernate中单向多对一的关联疑惑(管理员勿将帖子转到问答,那里不好交流)
本人初学hibernate,希望大家多多指教! <br />我假设person和card的多对一的关系(实际这两者的关系不是多对一) <br />他们对应的映射文件是: <br /><strong>person.hbm.xml</strong> <br /><pre name="code" class="xml"><!----> &lt;hibernate-mapping schema="hibernatequickuse"&gt; &lt;class name="mypack.person" table="person"&gt; &lt;id name="id" column="id" type="java.lang.Integer"&gt; &lt;generator class="identity"&gt; &lt;/id&gt; &lt;property name="name" column="name" type="java.lang.String" not-null="true"&gt;&lt;/property&gt; &lt;many-to-one name="mycard" column="card_id" class="mypack.Card" cascade="all"&gt;&lt;/many-to-one&gt; &lt;/class&gt; &lt;/hibernate-mapping&gt; </pre> <br /><strong>Card.hbm.xml</strong> <br /><pre name="code" class="xml"><!----> &lt;hibernate-mapping&gt; &lt;class name="mypack.Card" table="card"&gt; &lt;id name="id" column="ID" type="java.lang.Integer"&gt; &lt;generator class="identity"&gt; &lt;/id&gt; &lt;property name="name" column="NAME" type="java.lang.String" not-null="true"&gt;&lt;/property&gt; &lt;/class&gt; &lt;/hibernate-mapping&gt; </pre> <br />假设当我们先把many-to-one中的cascade属性值去掉,改为: <br /><pre name="code" class="xml">&lt;many-to-one name="mycard" column="card_id" class="mypack.Card"&gt;&lt;/many-to-one&gt; </pre> <br />然后执行如下代码: <br /><pre name="code" class="java"> person p=new person(); p.setName("jack01"); Card c=new Card(); c.setName("card0031"); p.setMycard(c); Session session=null; Transaction tran=null; try{ session=factory.openSession(); tran=session.beginTransaction(); session.save(p);//为什么是update,而不是Insert tran.commit(); 。。。。。。。 </pre> <br />执行结果本来应该会报一个异常,因为只持久化了person对象。而card是临时对象,所以当hibernate自动清理缓存中的持久化对象时会发现p引用了c临时对象,而在person表中对应的card_id字段值为0,这说明person持久化对象的状态和数据库的记录不一致,所以应该会抛出异常!但是它却并没有抛出异常, <br />而是插入了一条person记录,其card_id=0这是为什么??? <br /><pre name="code" class="sql">Hibernate: insert into hibernatequickuse.person (name, card_id) values (?, ?)</pre> <br />当我把cascade="all"加上去之后,本来这时应该是先插入card记录,然后插入Person记录。但结果却是: <br /><pre name="code" class="sql">Hibernate: insert into hibernatequickuse.person (name, card_id) values (?, ?) Hibernate: update card set NAME=? where ID=? </pre> <br />而且抛出异常,表示无法更新!这又是为什么???????? <br /><pre name="code" class="java">Exception executing batch: org.hibernate.StaleStateException: Batch update returned unexpected row count from update [0]; actual row count: 0; expected: 1 </pre> <br /><strong>表结构如下:</strong> <br /><pre name="code" class="sql">-- -- 表的结构 `card` -- CREATE TABLE `card` ( `id` int(11) NOT NULL auto_increment, `name` varchar(20) collate latin1_general_ci NOT NULL, PRIMARY KEY (`id`) ) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci AUTO_INCREMENT=7 ; CREATE TABLE `person` ( `id` int(11) NOT NULL auto_increment, `name` varchar(32) collate latin1_general_ci NOT NULL, `card_id` int(11) unsigned NOT NULL, PRIMARY KEY (`id`), KEY `card_id` (`card_id`) ) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci AUTO_INCREMENT=4 ; </pre> <br /><strong>POJO如下:</strong> <br /><strong>person</strong> <br /><pre name="code" class="java">package mypack; public class person implements java.io.Serializable{ private int id; private String name; private Card mycard; public person(){ } private void setId(int id){ this.id=id; } public void setName(String name){ this.name=name; } public void setMycard(Card mycard){ this.mycard=mycard; } public int getId(){ return this.id; } public String getName(){ return this.name; } public Card getMycard(){ return this.mycard; } } </pre> <br /> <br /><strong>Card</strong> <br /><pre name="code" class="java">package mypack; public class Card { private int id; private String name; public Card(){ } public void setId(int id){ this.id=id; } public void setName(String name){ this.name=name; } public String getName(){ return this.name; } public int getId(){ return this.id; } } </pre> <br /> <br /><br /><strong>问题补充</strong><br />补充下:我是参照网友的教程来做的,地址是:http://ryanpoy.iteye.com/blog/189783 <br />奇怪的是他的结果是正确的!程序里面唯一不同的是我主键的设置上,我用的是auto_increment,映射xml中用的是identity! <br /> <br /><br /><strong>问题补充:</strong><br />谢谢kulinglei的回答,问题是我将cascade="save-update"; 它也没报任何异常啊,正常的情况应该是会报你所说的异常啊 !我把源码上传下,能帮我看看吗?<br /><strong>问题补充:</strong><br />这是源码,希望大家帮帮忙!<br /><strong>问题补充:</strong><br />谢谢etank帮忙,但我也用的是hibernate3的包,并且把identity改为了native。把cascade设为none,结果还是没报任何异常啊?我用的是mysql的数据库
hql语句分组查询
表(TbCer) 表字段: ID(主键),用户名称(userName),领用数量(count),结余数(blance) 我想通过一条hql语句实现表通过userName分组并且查出各个组的最大ID。
在hql下用数据库函数的时候,返回值的处理方式
先看代码 [code="java"] getHibernateTemplate().find("select c.id,c.name,count(t.id) from Classes c inner join Student t group by c.id,c.name"); [/code] 这段代码返回值的是List<Object[]>,而我现在在dao和service没有做处理就直接返回了.... 现在好多地方都用到类似的查询,而返回的是数组不是实体对象,所以在action或页面中取的时候很麻烦(有时候字段多就看的晕了...) 所以问下大家有什么好的解决办法?
使用jpa按精度为天的时间分组,可是数据库的时间精度到秒,怎么办?谢谢
你好,,,,使用jpa按精度为天的时间分组,可是数据库的时间精度到秒,怎么办? 还有jpa使用count函数查询的结果是否自动封装进结果集了,前端应该如何获取? ``` predicates.add(cb.like(root.get("productName"), productName)); query.multiselect(cb.count(root.get("id"))); query.groupBy(root.get("createTime"), root.get("productName")); ``` query.groupBy(root.get("createTime"))就是这点,选择是数据库字段,可是数据库精度到秒,要求按天分
项目从mysql迁移到oracle报错
本来没有一点错误,迁移之后出现了很多,不知道哪位大神见过下面的问题: 17:23:54,967 ERROR BasicPropertyAccessor:118 - IllegalArgumentException in class: com.ebupt.dataWarehouse.entity.dataQualityMonitoring.MonTaskConEntity, setter method of property: TemporaryIId 17:23:54,995 ERROR BasicPropertyAccessor:122 - expected type: int, actual value: java.math.BigDecimal 17:23:55,000 DEBUG ConnectionManager:325 - transaction completed on session with on_close connection release mode; be sure to close the session to release JDBC resources! 17:23:55,006 ERROR MonTaskConDao:101 - org.hibernate.PropertyAccessException: IllegalArgumentException occurred while calling setter of com.ebupt.dataWarehouse.entity.dataQualityMonitoring.MonTaskConEntity.TemporaryIId 17:23:55,009 DEBUG ConnectionManager:464 - releasing JDBC connection [ (open PreparedStatements: 0, globally: 0) (open ResultSets: 0, globally: 0)] 17:23:55,024 DEBUG ConnectionManager:325 - transaction completed on session with on_close connection release mode; be sure to close the session to release JDBC resources! 17:23:55,071 ERROR DataQualityMonitoringImpl:65 - org.hibernate.PropertyAccessException: IllegalArgumentException occurred while calling setter of com.ebupt.dataWarehouse.entity.dataQualityMonitoring.MonTaskConEntity.TemporaryIId 17:23:55,073 ERROR MonitoringTaskConfigurationAction:54 - org.hibernate.PropertyAccessException: IllegalArgumentException occurred while calling setter of com.ebupt.dataWarehouse.entity.dataQualityMonitoring.MonTaskConEntity.TemporaryIId DAO层的相关函数是这样写的: public List<MonTaskConEntity> getMonTaskConList() throws Exception { Session session = sessionFactory.openSession(); String sql = "SELECT d1.domain_id TemporaryIId, " + "d1.job_id TemporaryId, " + "d1.job_name job_name, " + "d1.is_effective is_effective, " + "d1.object_type object_type, " + "d1.object_name object_name, " + "d1.object_ename object_ename, " +"d1.object_location object_location ," +"d1.time_field time_field, " + "COUNT(d2.rule_id) columnNum " + "from dq_conf_jobs d1, dq_conf_rule d2 " //+ "where (d1.job_id = d2.job_id OR d1.job_id not in (SELECT job_id from dq_conf_rule)) AND d2.is_effective = '1'" //+ "where ((d1.job_id = d2.job_id AND d1.domain_id = d2.domain_id) OR d1.job_id not in (SELECT job_id from dq_conf_rule)) AND d2.is_effective = '1'" + "where d1.job_id = d2.job_id OR d1.job_id not in (SELECT job_id from dq_conf_rule)" //-- + "GROUP BY d1.job_id"; //非聚合函数字段都要在group by里面好像 + "GROUP BY d1.job_id,d1.domain_id,d1.job_name,d1.is_effective,d1.object_type,d1.object_name,d1.object_ename,d1.object_location,d1.time_field"; //String sql = ""; try { Query query = session.createSQLQuery(sql) .addScalar("TemporaryIId") .addScalar("TemporaryId") .addScalar("job_name") .addScalar("object_type") .addScalar("object_name") .addScalar("is_effective") .addScalar("object_ename") .addScalar("object_location") .addScalar("time_field") .addScalar("columnNum", Hibernate.INTEGER) .setResultTransformer(Transformers.aliasToBean(MonTaskConEntity.class)); List<MonTaskConEntity> resultList = query.list(); //查询rule总数,进行过滤 String countSql = "SELECT COUNT(*) FROM dq_conf_rule"; Query countQuery = session.createSQLQuery(countSql); int count = ((Number) countQuery.uniqueResult()).intValue(); //数据整理,id.job_id的赋值,如果rule行数为总行数,则表明该job并没有rule if (resultList != null && resultList.size() > 0) { for (MonTaskConEntity entity : resultList) { if (entity.getColumnNum() == count) { entity.setColumnNum(0); } MonTaskConEntityId idEntity = new MonTaskConEntityId(); idEntity.setJob_id(entity.getTemporaryId()); idEntity.setDomain_id(entity.getTemporaryIId()); entity.setId(idEntity); } } return resultList; } catch (Exception e) { log.error(e); throw e; } finally { session.close(); } } 目的是把表格的数据获取显现出来 谢谢大家
springboot 配置多库之后,mybatis在控制台不打印sql语句了
springboot项目 单库下,mybatis只需要添加如下配置,就可以打印sql语句 ```xml <!-- 打印查询语句 --> <setting name="logImpl" value="STDOUT_LOGGING" /> ``` 但是多库环境下,mybatis不论怎么设置,都无法打印sql语句..... ---- ---- 项目中的相关配置: mybatis配置: ```xml <!-- 设置运行参数 --> <settings> <!-- 全局映射器启用缓存 --> <setting name="cacheEnabled" value="true" /> <!-- 查询时,关闭关联对象及时加载以提高性能 --> <setting name="lazyLoadingEnabled" value="false" /> <!-- 设置关联对象加载的形态,此处为按需加载字段(加载字段由SQL指定),不会加载关联表的所有字段,以提高性能 --> <setting name="aggressiveLazyLoading" value="false" /> <!-- 对于位置的SQL查询,允许返回不同的结果集以达到通用的效果 --> <setting name="multipleResultSetsEnabled" value="true" /> <!-- 允许使用列标签代替列明 --> <setting name="useColumnLabel" value="true" /> <!-- 允许使用自定义的主键值(比如由程序生成的UUID 32位编码作为键值), 数据表的pk生成策略将被覆盖 --> <setting name="useGeneratedKeys" value="true" /> <!-- 给予被嵌套的resultMap以字段-属性的映射支持 --> <setting name="autoMappingBehavior" value="PARTIAL" /> <!-- 对于批量更新操作缓存SQL以提高性能 --> <setting name="defaultExecutorType" value="REUSE" /> <!-- 数据库超过25000秒仍未响应则超时 --> <!--<setting name="defaultStatementTimeout" value="25000" />--> <!-- 打印查询语句 --> <setting name="logImpl" value="STDOUT_LOGGING" /> <!-- 开启驼峰--> <setting name="mapUnderscoreToCamelCase" value="true" /> </settings> ``` logback配置: ```xml <?xml version="1.0" encoding="UTF-8"?> <configuration scan="true"> <!-- 属性1:每个logger都关联到logger上下文,默认上下文名称为“default”。 但可以使用设置成其他名字,用于区分不同应用程序的记录。一旦设置,不能修改,可以通过%contextName来打印日志上下文名称。 --> <contextName>logback</contextName> <!--属性2:定义日志文件的存储地址 勿在 LogBack 的配置中使用相对路径--> <!-- <springProfile name="dev"> <property name="LOG_PATH" value="D://care-management-statisticserver-logs"/> </springProfile> <springProfile name="test"> <property name="LOG_PATH" value="/data/tomcat_jar/taixin_care/care-management-statisticserver/logs"/> </springProfile> <springProfile name="prod"> <property name="LOG_PATH" value="/data1/logs/care-management-statisticserver"/> </springProfile> --> <property name="LOG_PATH" value="${LOG_FILE}"/> <!--appender用来格式化日志输出节点,有俩个属性name和class,class用来指定哪种输出策略,常用就是控制台输出策略和文件输出策略。--> <!-- %m输出的信息,%p日志级别,%t线程名,%d日期,%c类的全名,,,, --> <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender"> <filter class="ch.qos.logback.classic.filter.ThresholdFilter"> <level>info</level> </filter> <encoder> <pattern>%date %level [%thread] %logger{36} [%file : %line] %msg%n</pattern> </encoder> </appender> <!--<include resource="org/springframework/boot/logging/logback/base.xml"/>--> <!-- 说明: 1、日志级别及文件 日志记录采用分级记录,级别与日志文件名相对应,不同级别的日志信息记录到不同的日志文件中 例如:error级别记录到log_error_xxx.log或log_error.log(该文件为当前记录的日志文件),而log_error_xxx.log为归档日志, 日志文件按日期记录,同一天内,若日志文件大小等于或大于2M,则按0、1、2...顺序分别命名 例如log-level-2013-12-21.0.log 其它级别的日志也是如此。 2、文件路径 若开发、测试用,在Eclipse中运行项目,则到Eclipse的安装路径查找logs文件夹,以相对路径../logs。 若部署到Tomcat下,则在Tomcat下的logs文件中 3、Appender FILEERROR对应error级别,文件名以log-error-xxx.log形式命名 FILEWARN对应warn级别,文件名以log-warn-xxx.log形式命名 FILEINFO对应info级别,文件名以log-info-xxx.log形式命名 FILEDEBUG对应debug级别,文件名以log-debug-xxx.log形式命名 CONSOLE将日志信息输出到控制上,为方便开发测试使用 --> <!-- 日志记录器,日期滚动记录 --> <appender name="FILEERROR" class="ch.qos.logback.core.rolling.RollingFileAppender"> <!-- 正在记录的日志文件的路径及文件名 --> <file>${LOG_PATH}/error_statisticserver.log</file> <!-- 日志记录器的滚动策略,按日期,按大小记录 --> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <!-- 归档的日志文件的路径,例如今天是2013-12-21日志,当前写的日志文件路径为file节点指定,可以将此文件与file指定文件路径设置为不同路径,从而将当前日志文件或归档日志文件置不同的目录。 而2013-12-21的日志文件在由fileNamePattern指定。%d{yyyy-MM-dd}指定日期格式,%i指定索引 --> <fileNamePattern>${LOG_PATH}/error-statisticserver-%d{yyyy-MM-dd}.%i.log</fileNamePattern> <!-- 表示只保留最近30天的日志,以防止日志填满整个磁盘空间。--> <maxHistory>30</maxHistory> <!--用来指定日志文件的上限大小,例如设置为1GB的话,那么到了这个值,就会删除旧的日志。--> <totalSizeCap>1GB</totalSizeCap> <!-- 除按日志记录之外,还配置了日志文件不能超过2M,若超过2M,日志文件会以索引0开始, 命名日志文件,例如log-error-2013-12-21.0.log --> <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP"> <maxFileSize>100MB</maxFileSize> </timeBasedFileNamingAndTriggeringPolicy> </rollingPolicy> <!-- 追加方式记录日志 --> <append>true</append> <!-- 日志文件的格式 --> <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder"> <pattern>%date %level [%thread] %logger{36} [%file : %line] %msg%n</pattern> <charset>utf-8</charset> </encoder> <!-- 此日志文件只记录error级别的 --> <filter class="ch.qos.logback.classic.filter.LevelFilter"> <level>ERROR</level> <onMatch>ACCEPT</onMatch> <onMismatch>DENY</onMismatch> </filter> </appender> <!-- 日志记录器,日期滚动记录 --> <appender name="FILEINFO" class="ch.qos.logback.core.rolling.RollingFileAppender"> <!-- 正在记录的日志文件的路径及文件名 --> <file>${LOG_PATH}/info_statisticserver.log</file> <!-- 日志记录器的滚动策略,按日期,按大小记录 --> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <!-- 归档的日志文件的路径,例如今天是2013-12-21日志,当前写的日志文件路径为file节点指定,可以将此文件与file指定文件路径设置为不同路径,从而将当前日志文件或归档日志文件置不同的目录。 而2013-12-21的日志文件在由fileNamePattern指定。%d{yyyy-MM-dd}指定日期格式,%i指定索引 --> <fileNamePattern>${LOG_PATH}/info-statisticserver-%d{yyyy-MM-dd}.%i.log</fileNamePattern> <!-- 表示只保留最近30天的日志,以防止日志填满整个磁盘空间。--> <maxHistory>30</maxHistory> <!--用来指定日志文件的上限大小,例如设置为1GB的话,那么到了这个值,就会删除旧的日志。--> <totalSizeCap>1GB</totalSizeCap> <!-- 除按日志记录之外,还配置了日志文件不能超过2M,若超过2M,日志文件会以索引0开始,命名日志文件,例如log-error-2013-12-21.0.log --> <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP"> <maxFileSize>100MB</maxFileSize> </timeBasedFileNamingAndTriggeringPolicy> </rollingPolicy> <!-- 追加方式记录日志 --> <append>true</append> <!-- 日志文件的格式 --> <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder"> <pattern>%date %level [%thread] %logger{36} [%file : %line] %msg%n</pattern> <charset>utf-8</charset> </encoder> <!-- 此日志文件只记录info级别的 --> <filter class="ch.qos.logback.classic.filter.LevelFilter"> <level>INFO</level> <onMatch>ACCEPT</onMatch> <onMismatch>DENY</onMismatch> </filter> </appender> <!-- <logger>用来设置某一个包或者具体的某一个类的日志打印级别、以及指定<appender>。<logger>仅有一个name属性,一个可选的level和一个可选的addtivity属性。 --> <logger name="org.springframework" level="INFO"/> <logger name="org.apache" level="ERROR"/> <logger name="org.hibernate.validator" level="ERROR"/> <!--<logger name="org.thymeleaf" level="ERROR"/>--> <logger name="org.springframework.context.annotation" level="ERROR"/> <!-- springProfile多环境日志输出,据不同环境(prod:生产环境,test:测试环境,dev:开发环境)来定义不同的日志输出--> <springProfile name="dev" /> <root level="INFO"> <appender-ref ref="FILEERROR"/> <appender-ref ref="FILEINFO"/> <appender-ref ref="STDOUT"/> </root> <!-- 可以启动服务的时候指定 profile (如不指定使用默认),如指定prod 的方式为: java -jar xxx.jar –spring.profiles.active=prod--> </configuration> ``` application.properties部分配置: ```properties #配置文件 logging.level.tk.mybatis=TRACE spring.freemarker.cache=false spring.freemarker.request-context-attribute=request mybatis.type-aliases-package=com.mtpf.domain mybatis.mapper-locations=classpath:mapper/*.xml mapper.mappers=com.mtpf.util.MyMapper mapper.not-empty=false mapper.identity=MYSQL pagehelper.helperDialect=mysql #true 是超出最大页码返回数据 false超出最大页码不返回数据 pagehelper.reasonable=${PAGEHELPER_REASONABLE} pagehelper.supportMethodsArguments=true pagehelper.params=count=countSql ```
使用Spring测试类测试,抛出HibernateException异常
我在开发中使用SpringTest测试机制进行服务层的单元测试,结果单元测试在执行初始化方法时就抛出异常,错误如下 [code="java"]java.lang.IllegalStateException: Failed to load ApplicationContext ... ... Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'dictionaryManager': Invocation of init method failed; nested exception is org.hibernate.HibernateException: No Hibernate Session bound to thread, and configuration does not allow creation of non-transactional one here ... ... Caused by: org.hibernate.HibernateException: No Hibernate Session bound to thread, and configuration does not allow creation of non-transactional one here at org.springframework.orm.hibernate3.SpringSessionContext.currentSession(SpringSessionContext.java:63) at org.hibernate.impl.SessionFactoryImpl.getCurrentSession(SessionFactoryImpl.java:685) at com.lily.dap.dao.hibernate.HibernateDao.getSession(HibernateDao.java:73) at com.lily.dap.dao.hibernate.HibernateDao.createQuery(HibernateDao.java:432) at com.lily.dap.dao.hibernate.HibernateDao.query(HibernateDao.java:152) at com.lily.dap.dao.hibernate.HibernateDao.query(HibernateDao.java:113) at com.lily.dap.service.common.impl.DictionaryManagerImpl.init(DictionaryManagerImpl.java:63) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) at java.lang.reflect.Method.invoke(Method.java:592) at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor$LifecycleElement.invoke(InitDestroyAnnotationBeanPostProcessor.java:340) at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor$LifecycleMetadata.invokeInitMethods(InitDestroyAnnotationBeanPostProcessor.java:293) at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor.postProcessBeforeInitialization(InitDestroyAnnotationBeanPostProcessor.java:130) ... 39 more[/code] 单元测试类继承了Spring的AbstractTransactionalJUnit4SpringContextTests类,然后测试中使用的Spring配置如下: applicationContext-dao.xml [code="java"]<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:jee="http://www.springframework.org/schema/jee" xmlns:tx="http://www.springframework.org/schema/tx" xmlns:context="http://www.springframework.org/schema/context" xmlns:aop="http://www.springframework.org/schema/aop" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd http://www.springframework.org/schema/jee http://www.springframework.org/schema/jee/spring-jee-3.0.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.0.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd" default-lazy-init="true"> <description>Spring DAO 配置文件</description> <bean id="dao" class="com.lily.dap.dao.hibernate.HibernateDao"> <property name="sessionFactory" ref="sessionFactory"/> <property name="batchSize" value="20"/> </bean> <!-- Hibernate配置 --> <bean id="sessionFactory" class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean"> <property name="dataSource" ref="dataSource" /> <property name="namingStrategy"> <bean class="org.hibernate.cfg.ImprovedNamingStrategy" /> </property> <property name="hibernateProperties"> <value> hibernate.dialect=${hibernate.dialect} hibernate.query.substitutions=true 'Y', false 'N' hibernate.show_sql=${hibernate.show_sql} hibernate.format_sql=true hibernate.cache.use_second_level_cache=true hibernate.cache.provider_class=org.hibernate.cache.EhCacheProvider hibernate.hbm2ddl.auto=none </value> </property> <property name="packagesToScan" value="com.lily.dap.entity" /> </bean> <!-- 事务管理器配置,单数据源事务 --> <bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager"> <property name="sessionFactory" ref="sessionFactory" /> </bean> <!-- 使用annotation定义事务 --> <tx:annotation-driven transaction-manager="transactionManager" proxy-target-class="true" /> </beans>[/code] DictionaryManagerTest-context.xml [code="java"]<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:aop="http://www.springframework.org/schema/aop" xmlns:context="http://www.springframework.org/schema/context" xmlns:tx="http://www.springframework.org/schema/tx" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.0.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd"> <aop:config> <aop:advisor id="managerTx" advice-ref="txAdvice" pointcut="execution(* com.lily.dap.service..*Manager.*(..))"/> </aop:config> <context:annotation-config/> <!-- Enable @Transactional support --> <tx:annotation-driven/> <!-- Enable @AspectJ support --> <aop:aspectj-autoproxy/> <tx:advice id="txAdvice"> <tx:attributes> <tx:method name="get*" read-only="true" no-rollback-for="com.lily.dap.service.core.exception.DataNotExistException"/> <tx:method name="count*" read-only="true" no-rollback-for="com.lily.dap.service.core.exception.DataNotExistException"/> <tx:method name="*" no-rollback-for="com.lily.dap.service.core.exception.DataNotExistException"/> </tx:attributes> </tx:advice> <bean class="com.lily.dap.service.SpringContextHolder" lazy-init="false"/> <bean id= "manager" class="com.lily.dap.service.core.ManagerImpl"/> <bean id= "dictionaryManager" class="com.lily.dap.service.common.impl.DictionaryManagerImpl"/> </beans>[/code] DictionaryManagerImpl代码大体如下: [code="java"]@Service("dictionaryManager") public class DictionaryManagerImpl extends BaseManager implements DictionaryManager { /** * 存放字典使用实体集合的Map,其中key对应那个字典目录,value为这个字典目录有那些实体对象的那个字段使用着 */ private Map<String, List<DictAccess>> dictionaryAccessMap = new HashMap<String, List<DictAccess>>(); @PostConstruct public void init() { //读取字典使用实体数据至dictionaryAccessMap,以供在执行删除字典数据时判断数据是否被使用的依据 List<DictAccess> list = dao.query(DictAccess.class, null); for (DictAccess dictAccess : list) { String catalogCode = dictAccess.getCatalogCode(); List<DictAccess> dictAccessList = dictionaryAccessMap.get(catalogCode); if (dictAccessList == null) { dictAccessList = new ArrayList<DictAccess>(); dictionaryAccessMap.put(catalogCode, dictAccessList); } dictAccessList.add(dictAccess); } } ... ... [/code]
Illegal attempt to map a non collection as a @OneToMany,@ManyToMany or@Collect
三个实体类Questions、survey和results。questions和Survey是多对多的关系,results是中间表。 Questions类如下: [code="java"]package com.bean; import java.util.HashSet; import java.util.Set; import javax.persistence.CascadeType; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.Id; import javax.persistence.JoinColumn; import javax.persistence.ManyToMany; import javax.persistence.ManyToOne; @Entity public class Questions { private int q_id;//问题主键ID private Set<Survey> survey=new HashSet<Survey>();//外键,属于哪一个问卷 private QuestionType q_type;//问题类型 private AnswerSheet as;//答卷表 private String q_head;//问题题目 private String q_body;//问题主体 private String q_key;//预留字段,如果是网上答卷,则是答案 private String q_remarks;// 预留字段,备注 private int q_number;//选项个数 @Id @GeneratedValue public int getQ_id() { return q_id; } public void setQ_id(int q_id) { this.q_id = q_id; } @ManyToMany (mappedBy="question") public Set<Survey> getSurvey() { return survey; } public void setSurvey(Set<Survey> survey) { this.survey = survey; } public String getQ_head() { return q_head; } public void setQ_head(String q_head) { this.q_head = q_head; } public String getQ_body() { return q_body; } public void setQ_body(String q_body) { this.q_body = q_body; } public String getQ_key() { return q_key; } public void setQ_key(String q_key) { this.q_key = q_key; } public String getQ_remarks() { return q_remarks; } public void setQ_remarks(String q_remarks) { this.q_remarks = q_remarks; } @ManyToOne(cascade=CascadeType.ALL) @JoinColumn (name="qt_id") public QuestionType getQ_type() { return q_type; } public void setQ_type(QuestionType q_type) { this.q_type = q_type; } @ManyToOne @JoinColumn(name="as_id") public AnswerSheet getAs() { return as; } public void setAs(AnswerSheet as) { this.as = as; } @Column(nullable=true) public int getQ_number() { return q_number; } public void setQ_number(int q_number) { this.q_number = q_number; } } [/code] Survey类: [code="java"]package com.bean; import java.util.Date; import java.util.HashSet; import java.util.Set; import javax.persistence.CascadeType; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.Id; import javax.persistence.JoinColumn; import javax.persistence.JoinTable; import javax.persistence.ManyToMany; import javax.persistence.ManyToOne; import javax.persistence.OneToOne; //问卷实体:包括各种属性 @Entity public class Survey { private int s_id;//问卷ID private String s_name;//问卷标题 private String s_des;//问卷描述或者备注 private boolean s_isOpen;//是否开放 private SurveyType s_type;//问卷类型 private int s_count;//问卷数量限制 private Date s_createTime;//问卷创建时间 private Date s_publishTime;//问卷发布时间 private Date s_deadline;//问卷截止提交日期 private String s_password;//问卷访问密码 private String s_isGrade;//问卷是否是打分问卷 private AnswerSheet as;//对应答卷 private Results results;//对应结果表 private Set<Questions> question= new HashSet<Questions>(); //private User s_author;//问卷创建者 @Id @GeneratedValue public int getS_id() { return s_id; } public void setS_id(int s_id) { this.s_id = s_id; } public String getS_name() { return s_name; } public void setS_name(String s_name) { this.s_name = s_name; } public String getS_des() { return s_des; } public void setS_des(String s_des) { this.s_des = s_des; } public boolean isS_isOpen() { return s_isOpen; } public void setS_isOpen(boolean s_isOpen) { this.s_isOpen = s_isOpen; } @ManyToOne @JoinColumn (name="st_id") public SurveyType getS_type() { return s_type; } public void setS_type(SurveyType s_type) { this.s_type = s_type; } public int getS_count() { return s_count; } public void setS_count(int s_count) { this.s_count = s_count; } public Date getS_createTime() { return s_createTime; } public void setS_createTime(Date s_createTime) { this.s_createTime = s_createTime; } public Date getS_publishTime() { return s_publishTime; } public void setS_publishTime(Date s_publishTime) { this.s_publishTime = s_publishTime; } public Date getS_deadline() { return s_deadline; } public void setS_deadline(Date s_deadline) { this.s_deadline = s_deadline; } public String getS_password() { return s_password; } public void setS_password(String s_password) { this.s_password = s_password; } @OneToOne(cascade = CascadeType.ALL,mappedBy="survey")//一对一双向关联 public AnswerSheet getAs() { return as; } public void setAs(AnswerSheet as) { this.as = as; } @ManyToMany @JoinTable(name="results", joinColumns={@JoinColumn(name="s_id")}, inverseJoinColumns={@JoinColumn(name="q_id")} ) public Set<Questions> getQuestion() { return question; } public void setQuestion(Set<Questions> question) { this.question = question; } @OneToOne(cascade = CascadeType.ALL,mappedBy="survey")//一对一双向关联 public Results getResults() { return results; } public void setResults(Results results) { this.results = results; } public String getS_isGrade() { return s_isGrade; } public void setS_isGrade(String s_isGrade) { this.s_isGrade = s_isGrade; } } [/code] results: [code="java"]package com.bean; import java.util.Date; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.Id; import javax.persistence.JoinColumn; import javax.persistence.OneToMany; import javax.persistence.Table; @Entity @Table(name="results") public class Results { private int r_id;//统计结果表ID private Questions questions ;//对应问题题目,外键 private Survey survey;//对应问卷,外键 private Date r_creatDate;//统计结果表产生时间 private int[] r_answerCount;//统计各种答案的数目 @Id @GeneratedValue public int getR_id() { return r_id; } public void setR_id(int r_id) { this.r_id = r_id; } @OneToMany @JoinColumn(name="q_id") public Questions getQuestions() { return questions; } public void setQuestions(Questions questions) { this.questions = questions; } @OneToMany @JoinColumn (name="s_id") public Survey getSurvey() { return survey; } public void setSurvey(Survey survey) { this.survey = survey; } public Date getR_creatDate() { return r_creatDate; } public void setR_creatDate(Date r_creatDate) { this.r_creatDate = r_creatDate; } public int[] getR_answerCount() { return r_answerCount; } public void setR_answerCount(int[] r_answerCount) { this.r_answerCount = r_answerCount; } } [/code] 出错信息: [code="java"]org.hibernate.AnnotationException: Illegal attempt to map a non collection as a @OneToMany, @ManyToMany or @CollectionOfElements: com.bean.Results.questions at org.hibernate.cfg.annotations.CollectionBinder.getCollectionBinder(CollectionBinder.java:266) at org.hibernate.cfg.AnnotationBinder.processElementAnnotations(AnnotationBinder.java:1448) at org.hibernate.cfg.AnnotationBinder.bindClass(AnnotationBinder.java:754) at org.hibernate.cfg.AnnotationConfiguration.processArtifactsOfType(AnnotationConfiguration.java:546) at org.hibernate.cfg.AnnotationConfiguration.secondPassCompile(AnnotationConfiguration.java:291) at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1333) at org.hibernate.cfg.AnnotationConfiguration.buildSessionFactory(AnnotationConfiguration.java:867) at com.bean.SurveyTest.BeforeClass(SurveyTest.java:17) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) at java.lang.reflect.Method.invoke(Method.java:597) at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:44) at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15) at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:41) at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:27) at org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:31) at org.junit.runners.ParentRunner.run(ParentRunner.java:236) at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:50) at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:467) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197) java.lang.NullPointerException at com.bean.SurveyTest.afterClass(SurveyTest.java:87) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) at java.lang.reflect.Method.invoke(Method.java:597) at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:44) at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15) at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:41) at org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:37) at org.junit.runners.ParentRunner.run(ParentRunner.java:236) at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:50) at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:467) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197) [/code] 大侠们,请赶快来看看吧!
《MySQL 性能优化》之理解 MySQL 体系结构
本文介绍 MySQL 的体系结构,包括物理结构、逻辑结构以及插件式存储引擎。
程序员请照顾好自己,周末病魔差点一套带走我。
程序员在一个周末的时间,得了重病,差点当场去世,还好及时挽救回来了。
卸载 x 雷某度!GitHub 标星 1.5w+,从此我只用这款全能高速下载工具!
作者 | Rocky0429 来源 | Python空间 大家好,我是 Rocky0429,一个喜欢在网上收集各种资源的蒟蒻… 网上资源眼花缭乱,下载的方式也同样千奇百怪,比如 BT 下载,磁力链接,网盘资源等等等等,下个资源可真不容易,不一样的方式要用不同的下载软件,因此某比较有名的 x 雷和某度网盘成了我经常使用的工具。 作为一个没有钱的穷鬼,某度网盘几十 kb 的下载速度让我...
Python+OpenCV实时图像处理
目录 1、导入库文件 2、设计GUI 3、调用摄像头 4、实时图像处理 4.1、阈值二值化 4.2、边缘检测 4.3、轮廓检测 4.4、高斯滤波 4.5、色彩转换 4.6、调节对比度 5、退出系统 初学OpenCV图像处理的小伙伴肯定对什么高斯函数、滤波处理、阈值二值化等特性非常头疼,这里给各位分享一个小项目,可通过摄像头实时动态查看各类图像处理的特点,也可对各位调参、测试...
2020年一线城市程序员工资大调查
人才需求 一线城市共发布岗位38115个,招聘120827人。 其中 beijing 22805 guangzhou 25081 shanghai 39614 shenzhen 33327 工资分布 2020年中国一线城市程序员的平均工资为16285元,工资中位数为14583元,其中95%的人的工资位于5000到20000元之间。 和往年数据比较: yea...
为什么猝死的都是程序员,基本上不见产品经理猝死呢?
相信大家时不时听到程序员猝死的消息,但是基本上听不到产品经理猝死的消息,这是为什么呢? 我们先百度搜一下:程序员猝死,出现将近700多万条搜索结果: 搜索一下:产品经理猝死,只有400万条的搜索结果,从搜索结果数量上来看,程序员猝死的搜索结果就比产品经理猝死的搜索结果高了一倍,而且从下图可以看到,首页里面的五条搜索结果,其实只有两条才是符合条件。 所以程序员猝死的概率真的比产品经理大,并不是错...
害怕面试被问HashMap?这一篇就搞定了!
声明:本文以jdk1.8为主! 搞定HashMap 作为一个Java从业者,面试的时候肯定会被问到过HashMap,因为对于HashMap来说,可以说是Java集合中的精髓了,如果你觉得自己对它掌握的还不够好,我想今天这篇文章会非常适合你,至少,看了今天这篇文章,以后不怕面试被问HashMap了 其实在我学习HashMap的过程中,我个人觉得HashMap还是挺复杂的,如果真的想把它搞得明明白...
毕业5年,我问遍了身边的大佬,总结了他们的学习方法
我问了身边10个大佬,总结了他们的学习方法,原来成功都是有迹可循的。
python爬取百部电影数据,我分析出了一个残酷的真相
2019年就这么匆匆过去了,就在前几天国家电影局发布了2019年中国电影市场数据,数据显示去年总票房为642.66亿元,同比增长5.4%;国产电影总票房411.75亿元,同比增长8.65%,市场占比 64.07%;城市院线观影人次17.27亿,同比增长0.64%。 看上去似乎是一片大好对不对?不过作为一名严谨求实的数据分析师,我从官方数据中看出了一点端倪:国产票房增幅都已经高达8.65%了,为什...
推荐10个堪称神器的学习网站
每天都会收到很多读者的私信,问我:“二哥,有什么推荐的学习网站吗?最近很浮躁,手头的一些网站都看烦了,想看看二哥这里有什么新鲜货。” 今天一早做了个恶梦,梦到被老板辞退了。虽然说在我们公司,只有我辞退老板的份,没有老板辞退我这一说,但是还是被吓得 4 点多都起来了。(主要是因为我掌握着公司所有的核心源码,哈哈哈) 既然 4 点多起来,就得好好利用起来。于是我就挑选了 10 个堪称神器的学习网站,推...
这些软件太强了,Windows必装!尤其程序员!
Windows可谓是大多数人的生产力工具,集娱乐办公于一体,虽然在程序员这个群体中都说苹果是信仰,但是大部分不都是从Windows过来的,而且现在依然有很多的程序员用Windows。 所以,今天我就把我私藏的Windows必装的软件分享给大家,如果有一个你没有用过甚至没有听过,那你就赚了????,这可都是提升你幸福感的高效率生产力工具哦! 走起!???? NO、1 ScreenToGif 屏幕,摄像头和白板...
阿里面试,面试官没想到一个ArrayList,我都能跟他扯半小时
我是真的没想到,面试官会这样问我ArrayList。
曾经优秀的人,怎么就突然不优秀了。
职场上有很多辛酸事,很多合伙人出局的故事,很多技术骨干被裁员的故事。说来模板都类似,曾经是名校毕业,曾经是优秀员工,曾经被领导表扬,曾经业绩突出,然而突然有一天,因为种种原因,被裁员了,...
大学四年因为知道了这32个网站,我成了别人眼中的大神!
依稀记得,毕业那天,我们导员发给我毕业证的时候对我说“你可是咱们系的风云人物啊”,哎呀,别提当时多开心啦????,嗯,我们导员是所有导员中最帅的一个,真的???? 不过,导员说的是实话,很多人都叫我大神的,为啥,因为我知道这32个网站啊,你说强不强????,这次是绝对的干货,看好啦,走起来! PS:每个网站都是学计算机混互联网必须知道的,真的牛杯,我就不过多介绍了,大家自行探索,觉得没用的,尽管留言吐槽吧???? 社...
良心推荐,我珍藏的一些Chrome插件
上次搬家的时候,发了一个朋友圈,附带的照片中不小心暴露了自己的 Chrome 浏览器插件之多,于是就有小伙伴评论说分享一下我觉得还不错的浏览器插件。 我下面就把我日常工作和学习中经常用到的一些 Chrome 浏览器插件分享给大家,随便一个都能提高你的“生活品质”和工作效率。 Markdown Here Markdown Here 可以让你更愉快的写邮件,由于支持 Markdown 直接转电子邮...
看完这篇HTTP,跟面试官扯皮就没问题了
我是一名程序员,我的主要编程语言是 Java,我更是一名 Web 开发人员,所以我必须要了解 HTTP,所以本篇文章就来带你从 HTTP 入门到进阶,看完让你有一种恍然大悟、醍醐灌顶的感觉。 最初在有网络之前,我们的电脑都是单机的,单机系统是孤立的,我还记得 05 年前那会儿家里有个电脑,想打电脑游戏还得两个人在一个电脑上玩儿,及其不方便。我就想为什么家里人不让上网,我的同学 xxx 家里有网,每...
剑指Offer对答如流系列 - 重建二叉树
面试题6:重建二叉树 题目:输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建出图2.6所示的二叉树并输出它的头结点。二叉树结点的定义如下: class TreeNode{ int val; TreeNode l...
史上最全的IDEA快捷键总结
现在Idea成了主流开发工具,这篇博客对其使用的快捷键做了总结,希望对大家的开发工作有所帮助。
阿里程序员写了一个新手都写不出的低级bug,被骂惨了。
这种新手都不会范的错,居然被一个工作好几年的小伙子写出来,差点被当场开除了。
谁是华为扫地僧?
是的,华为也有扫地僧!2020年2月11-12日,“养在深闺人不知”的华为2012实验室扫地僧们,将在华为开发者大会2020(Cloud)上,和大家见面。到时,你可以和扫地僧们,吃一个洋...
AI 没让人类失业,搞 AI 的人先失业了
最近和几个 AI 领域的大佬闲聊 根据他们讲的消息和段子 改编出下面这个故事 如有雷同 都是巧合 1. 老王创业失败,被限制高消费 “这里写我跑路的消息实在太夸张了。” 王葱葱哼笑一下,把消息分享给群里。 阿杰也看了消息,笑了笑。在座几位也都笑了。 王葱葱是个有名的人物,21岁那年以全额奖学金进入 KMU 攻读人工智能博士,累计发表论文 40 余篇,个人技术博客更是成为深度学习领域内风向标。 ...
2020年,冯唐49岁:我给20、30岁IT职场年轻人的建议
点击“技术领导力”关注∆每天早上8:30推送 作者|Mr.K 编辑| Emma 来源|技术领导力(ID:jishulingdaoli) 前天的推文《冯唐:职场人35岁以后,方法论比经验重要》,收到了不少读者的反馈,觉得挺受启发。其实,冯唐写了不少关于职场方面的文章,都挺不错的。可惜大家只记住了“春风十里不如你”、“如何避免成为油腻腻的中年人”等不那么正经的文章。 本文整理了冯...
一份王者荣耀的英雄数据报告
咪哥杂谈本篇阅读时间约为 6 分钟。1前言前一阵写了关于王者的一些系列文章,从数据的获取到数据清洗,数据落地,都是为了本篇的铺垫。今天来实现一下,看看不同维度得到的结论。2环境准备本次实...
作为一名大学生,如何在B站上快乐的学习?
B站是个宝,谁用谁知道???? 作为一名大学生,你必须掌握的一项能力就是自学能力,很多看起来很牛X的人,你可以了解下,人家私底下一定是花大量的时间自学的,你可能会说,我也想学习啊,可是嘞,该学习啥嘞,不怕告诉你,互联网时代,最不缺的就是学习资源,最宝贵的是啥? 你可能会说是时间,不,不是时间,而是你的注意力,懂了吧! 那么,你说学习资源多,我咋不知道,那今天我就告诉你一个你必须知道的学习的地方,人称...
那些年,我们信了课本里的那些鬼话
教材永远都是有错误的,从小学到大学,我们不断的学习了很多错误知识。 斑羚飞渡 在我们学习的很多小学课文里,有很多是错误文章,或者说是假课文。像《斑羚飞渡》: 随着镰刀头羊的那声吼叫,整个斑羚群迅速分成两拨,老年斑羚为一拨,年轻斑羚为一拨。 就在这时,我看见,从那拨老斑羚里走出一只公斑羚来。公斑羚朝那拨年轻斑羚示意性地咩了一声,一只半大的斑羚应声走了出来。一老一少走到伤心崖,后退了几步,突...
一个程序在计算机中是如何运行的?超级干货!!!
强烈声明:本文很干,请自备茶水!???? 开门见山,咱不说废话! 你有没有想过,你写的程序,是如何在计算机中运行的吗?比如我们搞Java的,肯定写过这段代码 public class HelloWorld { public static void main(String[] args) { System.out.println("Hello World!"); } ...
【蘑菇街技术部年会】程序员与女神共舞,鼻血再次没止住。(文末内推)
蘑菇街技术部的年会,别开生面,一样全是美女。
那个在阿里养猪的工程师,5年了……
简介: 在阿里,走过1825天,没有趴下,依旧斗志满满,被称为“五年陈”。他们会被授予一枚戒指,过程就叫做“授戒仪式”。今天,咱们听听阿里的那些“五年陈”们的故事。 下一个五年,猪圈见! 我就是那个在养猪场里敲代码的工程师,一年多前我和20位工程师去了四川的猪场,出发前总架构师慷慨激昂的说:同学们,中国的养猪产业将因为我们而改变。但到了猪场,发现根本不是那么回事:要个WIFI,没有;...
为什么程序猿都不愿意去外包?
分享外包的组织架构,盈利模式,亲身经历,以及根据一些外包朋友的反馈,写了这篇文章 ,希望对正在找工作的老铁有所帮助
Java校招入职华为,半年后我跑路了
何来 我,一个双非本科弟弟,有幸在 19 届的秋招中得到前东家华为(以下简称 hw)的赏识,当时秋招签订就业协议,说是入了某 java bg,之后一系列组织架构调整原因等等让人无法理解的神操作,最终毕业前夕,被通知调往其他 bg 做嵌入式开发(纯 C 语言)。 由于已至于校招末尾,之前拿到的其他 offer 又无法再收回,一时感到无力回天,只得默默接受。 毕业后,直接入职开始了嵌入式苦旅,由于从未...
世界上有哪些代码量很少,但很牛逼很经典的算法或项目案例?
点击上方蓝字设为星标下面开始今天的学习~今天分享四个代码量很少,但很牛逼很经典的算法或项目案例。1、no code 项目地址:https://github.com/kelseyhight...
​两年前不知如何编写代码的我,现在是一名人工智能工程师
全文共3526字,预计学习时长11分钟 图源:Unsplash 经常有小伙伴私信给小芯,我没有编程基础,不会写代码,如何进入AI行业呢?还能赶上AI浪潮吗? 任何时候努力都不算晚。 下面,小芯就给大家讲一个朋友的真实故事,希望能给那些处于迷茫与徘徊中的小伙伴们一丝启发。(下文以第一人称叙述) 图源:Unsplash 正如Elsa所说,职业转换是...
强烈推荐10本程序员必读的书
很遗憾,这个春节注定是刻骨铭心的,新型冠状病毒让每个人的神经都是紧绷的。那些处在武汉的白衣天使们,尤其值得我们的尊敬。而我们这些窝在家里的程序员,能不外出就不外出,就是对社会做出的最大的贡献。 有些读者私下问我,窝了几天,有点颓丧,能否推荐几本书在家里看看。我花了一天的时间,挑选了 10 本我最喜欢的书,你可以挑选感兴趣的来读一读。读书不仅可以平复恐惧的压力,还可以对未来充满希望,毕竟苦难终将会...
立即提问