hibernate 根据持久化类 创建数据库表的时候出现的错误如下,请大神帮忙解决?

十二月 09, 2015 1:49:52 下午 org.hibernate.tool.hbm2ddl.DatabaseMetadata getTableMetadata
信息: table not found: DIC_TAB
十二月 09, 2015 1:49:52 下午 org.hibernate.tool.hbm2ddl.DatabaseMetadata getTableMetadata
信息: table not found: WEBINFO
十二月 09, 2015 1:49:52 下午 org.hibernate.tool.hbm2ddl.DatabaseMetadata getTableMetadata
信息: table not found: WEBMENU
十二月 09, 2015 1:49:52 下午 org.hibernate.tool.hbm2ddl.DatabaseMetadata getTableMetadata
信息: table not found: WEBROLE
十二月 09, 2015 1:49:52 下午 org.hibernate.tool.hbm2ddl.DatabaseMetadata getTableMetadata
信息: table not found: WEBUSER
十二月 09, 2015 1:49:52 下午 org.hibernate.tool.hbm2ddl.SchemaUpdate execute
严重: Unsuccessful: create table PROMAN.DIC_TAB (DIC_TAB_NAME varchar(255) not null, CODE_ID varchar(255) not null, STD_NAME varchar(2), DATA_SUBSET varchar(255) not null, STD_CODE varchar(255), DIC_TAB_DESC varchar(255), CODE_NAME varchar(255) not null, CODE_LEVEL bit, CODE_PARENT varchar(255), CODE_DISPLAY bit, CODE_SORT integer, IS_LEAF bit, primary key (DIC_TAB_NAME, CODE_ID))
十二月 09, 2015 1:49:52 下午 org.hibernate.tool.hbm2ddl.SchemaUpdate execute
严重: Unknown database 'proman'
十二月 09, 2015 1:49:52 下午 org.hibernate.tool.hbm2ddl.SchemaUpdate execute
严重: Unsuccessful: create table PROMAN.WEBINFO (ID varchar(255) not null, ORDERID integer, TITLE varchar(255), CONTENT varchar(255), AUTHOR varchar(255), ADDTIME datetime, PUBLISH bit, primary key (ID))
十二月 09, 2015 1:49:52 下午 org.hibernate.tool.hbm2ddl.SchemaUpdate execute
严重: Unknown database 'proman'
十二月 09, 2015 1:49:52 下午 org.hibernate.tool.hbm2ddl.SchemaUpdate execute
严重: Unsuccessful: create table PROMAN.WEBMENU (MENUID integer not null auto_increment, ORDERID integer, PARENTID integer, TEXT varchar(255), QTIP varchar(255), URL varchar(255), ICONCLS varchar(255), LEAF bit, SHOWFLAG bit, PARAM varchar(255), primary key (MENUID))
十二月 09, 2015 1:49:52 下午 org.hibernate.tool.hbm2ddl.SchemaUpdate execute
严重: Unknown database 'proman'
十二月 09, 2015 1:49:52 下午 org.hibernate.tool.hbm2ddl.SchemaUpdate execute
严重: Unsuccessful: create table PROMAN.WEBROLE (ROLECODE varchar(255) not null, ROLENAME varchar(255), MEMO varchar(255), primary key (ROLECODE))
十二月 09, 2015 1:49:52 下午 org.hibernate.tool.hbm2ddl.SchemaUpdate execute
严重: Unknown database 'proman'
十二月 09, 2015 1:49:52 下午 org.hibernate.tool.hbm2ddl.SchemaUpdate execute
严重: Unsuccessful: create table PROMAN.WEBUSER (USERNAME varchar(255) not null, ROLECODE varchar(255), USERCNAME varchar(255), USERPWD varchar(255), MOBILE varchar(255), EMAIL varchar(255), ISLOCK integer, DEPT varchar(255), primary key (USERNAME))
十二月 09, 2015 1:49:52 下午 org.hibernate.tool.hbm2ddl.SchemaUpdate execute
严重: Unknown database 'proman'
十二月 09, 2015 1:49:52 下午 org.hibernate.tool.hbm2ddl.SchemaUpdate execute
严重: Unsuccessful: alter table PROMAN.WEBUSER add index FK73C678FFB70C19B8 (ROLECODE), add constraint FK73C678FFB70C19B8 foreign key (ROLECODE) references PROMAN.WEBROLE (ROLECODE)
十二月 09, 2015 1:49:52 下午 org.hibernate.tool.hbm2ddl.SchemaUpdate execute
严重: Table 'proman.webuser' doesn't exist
十二月 09, 2015 1:49:52 下午 org.hibernate.tool.hbm2ddl.SchemaUpdate execute
严重: Unsuccessful: alter table WEBRM add index FK4EA5C6F86A9F1F8 (MENUID), add constraint FK4EA5C6F86A9F1F8 foreign key (MENUID) references PROMAN.WEBMENU (MENUID)
十二月 09, 2015 1:49:52 下午 org.hibernate.tool.hbm2ddl.SchemaUpdate execute
严重: Can't create table '.\ssh#sql-7dc_2.frm' (errno: 150)
十二月 09, 2015 1:49:52 下午 org.hibernate.tool.hbm2ddl.SchemaUpdate execute
严重: Unsuccessful: alter table WEBRM add index FK4EA5C6FB70C19B8 (ROLECODE), add constraint FK4EA5C6FB70C19B8 foreign key (ROLECODE) references PROMAN.WEBROLE (ROLECODE)
十二月 09, 2015 1:49:52 下午 org.hibernate.tool.hbm2ddl.SchemaUpdate execute
严重: Can't create table '.\ssh#sql-7dc_2.frm' (errno: 150)
十二月 09, 2015 1:49:52 下午 org.hibernate.tool.hbm2ddl.SchemaUpdate execute
信息: schema update complete

2个回答

看看是不是数据库的权限问题,或者连接的问题。都是无法创建表结构一类的错误。

创建表失败。首先检查你是否连上了数据库。可以使用正常的mysql工具试试,然后再用hibernate。

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
为什么hibernate无法根据model更新表?
hibernate的hbm2ddl.auto属性,设置成update后,无法根据model更新表! 异常日志 ``` INFO: HHH10001501: Connection obtained from JdbcConnectionAccess [org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator$ConnectionProviderJdbcConnectionAccess@597db45e] for (non-JTA) DDL execution was not in auto-commit mode; the Connection 'local transaction' will be committed and the Connection will be set into auto-commit mode. Hibernate: create table DEPT ( deptNo varchar2(255) not null, dname varchar2(255), time varchar2(255), primary key (deptNo) ) 一月 24, 2017 10:11:30 上午 org.hibernate.tool.schema.internal.ExceptionHandlerLoggedImpl handleException WARN: GenerationTarget encountered exception accepting command : Error executing DDL via JDBC Statement org.hibernate.tool.schema.spi.CommandAcceptanceException: Error executing DDL via JDBC Statement at org.hibernate.tool.schema.internal.exec.GenerationTargetToDatabase.accept(GenerationTargetToDatabase.java:67) lCoordinator.process(SchemaManagementToolCoordinator.java:72) Caused by: java.sql.SQLSyntaxErrorException: ORA-00955: 名称已由现有对象使用 at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:450) at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:399) at oracle.jdbc.driver.T4C8Oall.processError(T4C8Oall.java:1059) apper.execute(OracleStatementWrapper.java:334) at org.hibernate.tool.schema.internal.exec.GenerationTargetToDatabase.accept(GenerationTargetToDatabase.java:54) ... 63 more ``` 这是我的配置文件 ``` <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://hibernate.org/dtd/hibernate-configuration-3.0.dtd"> <hibernate-configuration> <session-factory> <!-- 指定连接数据库所用的驱动 --> <property name="connection.driver_class">oracle.jdbc.driver.OracleDriver</property> <!-- 指定连接数据库的url,其中hibernate是本应用连接的数据库名 --> <property name="connection.url">jdbc:oracle:thin:@192.168.0.18:1521:qfy</property> <!-- 指定连接数据库的用户名 --> <property name="connection.username">MFJCIVAIRDEFDISCOUNTY</property> <!-- 指定连接数据库的密码 --> <property name="connection.password">QFY_2015</property> <!-- 指定连接池里最大连接数 --> <property name="hibernate.c3p0.max_size">20</property> <!-- 指定连接池里最小连接数 --> <property name="hibernate.c3p0.min_size">1</property> <!-- 指定连接池里连接的超时时长 --> <property name="hibernate.c3p0.timeout">5000</property> <!-- 指定连接池里最大缓存多少个Statement对象 --> <property name="hibernate.c3p0.max_statements">100</property> <property name="hibernate.c3p0.idle_test_period">3000</property> <property name="hibernate.c3p0.acquire_increment">2</property> <property name="hibernate.c3p0.validate">true</property> <!-- 指定数据库方言 --> <property name="dialect">org.hibernate.dialect.OracleDialect</property> <!-- 根据需要自动创建数据表 --> <property name="hbm2ddl.auto">update</property><!--① --> <!-- 显示Hibernate持久化操作所生成的SQL --> <property name="show_sql">true</property> <!-- 将SQL脚本进行格式化后再输出 --> <property name="hibernate.format_sql">true</property> <!-- 避免这个错误信息Disabling contextual LOB creation as createClob() method threw error :java.lang.reflect.InvocationTargetException --> <property name="hibernate.temp.use_jdbc_metadata_defaults">false</property> </session-factory> </hibernate-configuration> ```
关于Hibernate级联数据表的存储问题(多对一)
本问题来自Struts2.1权威指南一书第19章例19.4问题,是一个关于Hibernate关联数据表存储的问题。 整个例子的目标就是建立一个WEB应用,在一个input.jsp页面上输入父亲和儿子信息,点击提交按钮,将这两个持久化对象的信息写入数据库中的两个数据表中,两个数据表分别是person(代表父亲)和son(代表儿子)。他们的关系是1(person)对N(son) 我在调试这个例程的时候遇到一个问题,就是在向数据库中写入持久化对象时出现错误提示如下: [color=blue]Caused by: java.sql.SQLException: Unknown column 'person_id' in 'field list'[/color] [b][color=red]经过检查具体出问题的语句是在PersonServiceImpl.java代码中的sd.save(s, son)这句(大约第在25行,就是向数据库中写入Son对象的那句)。这里说明一下sd是Son的DAO组件,具体的PersonServiceImpl.java代码见后面。 因为如果将这句注释掉,运行程序,程序可以走通,发现person表中person_id列是可以写入的。此时只是son表中没有写入任何数据。[/color][/b] 于是我检查了Person.hbm.xml、Son.hbm.xml文件,实在没有发现什么可疑之处,现将相关配置文件可能出现问题的关键部位贴出如下: --------------------PersonServiceImpl.java代码------ [code="java"] public class PersonServiceImpl implements PersonService { public void createPersonAndSon(String name , String gender , String[] sonName , int[] sonAge)throws PersonException { try { //业务逻辑组件依赖于DAO组件,从组件工厂中取出两个DAO组件 PersonDao pd = (PersonDao)ComponentFactory.instance().getComponent("personDao"); SonDao sd = (SonDao)ComponentFactory.instance().getComponent("sonDao"); //获取Hibernate Session Session s = HibernateUtil.sf.getCurrentSession(); Transaction tx = s.beginTransaction(); //以面向对象方式开始持久化操作 Person p = new Person(); p.setName(name); p.setGender(gender); pd.save(s , p); //增加Person实体关联的Son实体 for (int i = 0 ; i < sonName.length ; i++ ) { Son son = new Son(sonName[i] , sonAge[i]); son.setParent(p); sd.save(s, son);//就是这句出错了,如果注释掉这句,程序依然可以运行,只是son对象不写入数据库而已!!! } //提交事务 tx.commit(); } catch (Exception e) { e.printStackTrace(); throw new PersonException("业务异常"); } } } [/code] ---------------------Son.hbm.xml片段---------------------------------- [code="xml"] <!-- 每个class元素映射一个持久化类 --> <class name="Son" table="son"> <id name="id" column="son_id" unsaved-value="null"> <generator class="identity"/> </id> <property name="sonName" type="string"/> <property name="sonAge" type="int"/> <!-- 映射N:1关联实体 --> <many-to-one name="parent" column="person_id" class="Person" cascade="all" not-null="true"/> </class> [/code] ---------------------Person.hbm.xml片段---------------------------------- [code="xml"] <!-- 每个class元素映射一个持久化类 --> <class name="Person" table="person"> <id name="id" column="person_id" unsaved-value="null"> <generator class="identity"/> </id> <property name="name" type="string"/> <property name="gender" type="string"/> <!-- 映射1:N关联实体 --> <set name="sons" inverse="true"> <key column="person_id"/> <one-to-many class="Son"/> </set> </class> [/code] -----------------------创建数据库及表所使用的SQL语句---------------------- [code="sql"] DROP database if exists struts2hibernate; CREATE database struts2hibernate; use struts2hibernate; CREATE TABLE person(person_id INT AUTO_INCREMENT PRIMARY KEY, name VARCHAR(50), gender VARCHAR(50)); CREATE TABLE son(son_id INT AUTO_INCREMENT PRIMARY KEY, sonName VARCHAR(50), sonAge INT); [/code] 别的文件就是光盘中提供的,基本没有修改。目前由于已经能够登录到数据库,并且可以修改部分数据内容,因此关于数据库连接方面配置应该没有问题,但是实在是不知道问题出在哪里了。请不吝赐教!不胜感激!
在elipse上导入hibernate框架出现问题
在一开始导入hibernate框架时,导入了hibernate全部的包和c3p0数据源的包,结果在包名上产生了冲突, eclipse无法自动正确导入,把鼠标移到 import org.hibernate*.;时出现 the package org.hibernate is accessible from more than one module:hibernate.c3p0, hibernate.commons.annotations,hibernate.core; 当我把有冲突的包移除几个暂时不用的时候,没有编译错误,但运行的时候出现java.lang.NoClassDefFoundError 具体如下 Exception in thread "main" java.lang.NoClassDefFoundError: javax/xml/bind/JAXBException at org.hibernate.boot.spi.XmlMappingBinderAccess.<init>(XmlMappingBinderAccess.java:43) at org.hibernate.boot.MetadataSources.<init>(MetadataSources.java:87) at org.hibernate.cfg.Configuration.<init>(Configuration.java:123) at org.hibernate.cfg.Configuration.<init>(Configuration.java:118) at lee.NewsManager.main(NewsManager.java:30) Caused by: java.lang.ClassNotFoundException: javax.xml.bind.JAXBException at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(Unknown Source) at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(Unknown Source) at java.base/java.lang.ClassLoader.loadClass(Unknown Source) ... 5 more 具体代码如下: ```package lee; import org.hibernate.*; import org.hibernate.cfg.*; import org.hibernate.service.*; import org.hibernate.boot.registry.*; import org.crazyit.app.domain.New; public class NewsManager { public static void main(String[] args) throws Exception { // 实例化Configuration Configuration conf = new Configuration() // 不带参数的configure()方法默认加载hibernate.cfg.xml文件 // 如果传入abc.xml作为参数,则不再加载hibernate.cfg.xml,改为加载abc.xml .configure(); // 以Configuration实例创建SessionFactory实例 SessionFactory sf = conf.buildSessionFactory(); // 创建Session Session sess = sf.openSession(); // 开始事务 Transaction tx = sess.beginTransaction(); // 创建消息对象 New n = new New(); n.setContent( + "100"); sess.save(n); // 提交事务 tx.commit(); // 关闭Session sess.close(); sf.close(); } } package org.crazyit.app.domain; import java.util.ArrayList; import java.util.List; import javax.annotation.processing.Generated; import javax.persistence.CollectionTable; import javax.persistence.Column; import javax.persistence.ElementCollection; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.GenerationType; import javax.persistence.Id; import javax.persistence.OrderColumn; import javax.persistence.Table; import javax.persistence.TableGenerator; @Entity @Table(name="news_inf") public class New { @TableGenerator(name="newsGen",table="NEWS_ID_GEN",pkColumnName="gen_key",valueColumnName="gen_value",pkColumnValue="new_id") @GeneratedValue(strategy=GenerationType.TABLE,generator="newsGen") private Integer id; // 消息标题 private String title; // 消息内容 private String content; @ElementCollection (targetClass=String.class) @CollectionTable(name="school_inf",joinColumns=@JoinColumn(name="person_id",nullable=false)) @Column(name="school_name") @OrderColumn(name="list_order") private List<String>schools=new ArrayList<>(); @ElementCollection (targetClass=Float.class) @CollectionTable(name="score_inf",joinColumns=@JoinColumn(name="person_id",nullable=false)) @MapKeyColumn(name="subject_name") @MapKeyClass(String.class) @Column(name="mark") // id的setter和getter方法 public void setId(Integer id) { this.id = id; } public Integer getId() { return this.id; } // title的setter和getter方法 public void setTitle(String title) { this.title = title; } public String getTitle() { return this.title; } @Generated(GenerationTime.ALWAYS) @Column(name="full_content") private String fullContent; // content的setter和getter方法 public void setContent(String content) { this.content = content; } public String getContent() { return this.content; } } 配置文件<?xml version="1.0" encoding="GBK"?> <!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd"> <hibernate-configuration> <session-factory> <!-- 指定连接数据库所用的驱动 --> <property name="connection.driver_class">com.mysql.jdbc.Driver</property> <!-- 指定连接数据库的url,其中hibernate是本应用连接的数据库名 --> <property name="connection.url">jdbc:mysql://localhost/hibernate?useSSL=true</property> <!-- 指定连接数据库的用户名 --> <property name="connection.username">root</property> <!-- 指定连接数据库的密码 --> <property name="connection.password">ak474247152919</property> <!-- 指定连接池里最大连接数 --> <property name="hibernate.c3p0.max_size">20</property> <!-- 指定连接池里最小连接数 --> <property name="hibernate.c3p0.min_size">1</property> <!-- 指定连接池里连接的超时时长 --> <property name="hibernate.c3p0.timeout">5000</property> <!-- 指定连接池里最大缓存多少个Statement对象 --> <property name="hibernate.c3p0.max_statements">100</property> <property name="hibernate.c3p0.idle_test_period">3000</property> <property name="hibernate.c3p0.acquire_increment">2</property> <property name="hibernate.c3p0.validate">true</property> <!-- 指定数据库方言 --> <property name="dialect">org.hibernate.dialect.MySQL5InnoDBDialect</property> <!-- 根据需要自动创建数据表 --> <property name="hbm2ddl.auto">update</property><!--①--> <!-- 显示Hibernate持久化操作所生成的SQL --> <property name="show_sql">true</property> <!-- 将SQL脚本进行格式化后再输出 --> <property name="hibernate.format_sql">true</property> <!-- 罗列所有持久化类的类名 --> <mapping class="org.crazyit.app.domain.News"/> </session-factory> </hibernate-configuration> ```
spring+hibernate hibernateDaoSupport 的事物管理
hibernateDaoSupport 的事物管理hibernateDaoSupport 类来自动创建和提交的吗~! 为什么我在用hibernateDaoSupport 对数据库进行增删改没有注入事物,也可以年持久化数据。
用hibernate动态模型,找不到 class path resource
spring相关配置文件如下: <bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean"> <!-- 依赖注入数据源,注入正是上面定义的dataSource --> <property name="dataSource" ref="dataSource" /> <property name="mappingResources"><!-- mappingResouces属性用来列出全部映射文件 --> <list><!-- 以下用来列出Hibernate映射文件 --> <value>WEB-INF/dataEntity/sys/pl_entityRelation.hbm.xml</value> <!-- <value>/WEB-INF/dataEntity/sys/pl_entityDetail.hbm.xml</value> --> <!-- <value>/WEB-INF/dataEntity/sys/pl_entityRelation.hbm.xml</value> --> </list> </property> <!-- 定义Hibernate的SessionFactory的属性 --> <property name="hibernateProperties"> <props> <!-- 指定数据库方言 --> <prop key="hibernate.dialect"> org.hibernate.dialect.SQLServerDialect </prop> <!-- 是否根据需要每次自动创建数据库 --> <prop key="hibernate.hbm2ddl.auto">update</prop> <!-- 显示Hibernate持久化操作所生成的SQL --> <prop key="hibernate.show_sql">true</prop> <!-- 将SQL脚本进行格式化后再输出 --> <prop key="hibernate.format_sql">true</prop> </props> </property> </bean> 文件WEB-INF/dataEntity/sys/pl_entityRelation.hbm.xml确实有
hibernate缓存不解
大家看一下这段代码<pre name="code" class="java"> SessionFactory sessionFactory = new Configuration().configure().buildSessionFactory(); Session s = sessionFactory.openSession(); s.beginTransaction(); for(int i=0;i&lt;10;i++) { Cat cat = new Cat(); cat.setWeight(20.1f); cat.setName("cat_"+i);//此处改变了name属性的值,即使不改变,我也要求它插入新的十条数据 s.save(cat); } s.getTransaction().commit(); </pre> <br />映射文件:Cat.hbm.xml<pre name="code" class="xml"> &lt;hibernate-mapping&gt; &lt;class name="org.hibernate.entity.Cat" table="CAT"&gt; &lt;!-- A 32 hex character is our surrogate key. It's automatically generated by Hibernate with the UUID pattern. --&gt; &lt;id name="id" type="string" unsaved-value="null" &gt; &lt;column name="CAT_ID" sql-type="char(32)" not-null="true"/&gt; &lt;generator class="uuid.hex"/&gt; &lt;/id&gt; &lt;!-- A cat has to have a name, but it shouldn' be too long. --&gt; &lt;property name="name"&gt; &lt;column name="NAME" length="16" not-null="true"/&gt; &lt;/property&gt; &lt;property name="sex"/&gt; &lt;property name="weight"/&gt;&lt;!-- --&gt; &lt;/class&gt; &lt;/hibernate-mapping&gt; </pre>第一次执行插入操作时, <strong><span style="color: red">i</span></strong> 的范围是从0到10,执行没有问题,向数据库中插入了十条正确的数据。 <br />当第二次执行插入操作时,将&nbsp; <strong><span style="color: red">i</span></strong>&nbsp; 的范围改为从10到20,执行没有问题, <br />但<span style="color: red">此次操作的结果</span>“看起来”仅仅是对前面的数据进行修改,因为仅仅改变了其<span style="color: red">name</span>属性的值,其他的没有改变,而不是重新插入,这是为什么呢?也许是由于映射文件中对CAT_ID的设置有问题吗?<br/><strong>问题补充</strong><br/><div class="quote_title">肉嘎嘎 写道</div><div class="quote_div">为什么是修改,LZ说的修改是update吗?,你的代码上怎么没看出来有什么修改的啊?顶多就是又新增了10条数据!不解? <br /> <br />另外,对于save方法来说,当第一次持久化对象的时候,对象状态是从零时状态到了持久状态,这样数据库中存在了相应的记录(前10条记录),并且在缓存中保存了这10个对象和数据的快照,当你修改了循环次数,再次执行此方法的时候,由于你的属性没有任何改变,因此缓存快照的对象数据和你新创建的对象数据是一致的,所以在提交的时候,仅会对原有的数据重新做insert操作! <br /> <br />个人的分析,如有错误,请牛人指出,谢谢!~~~~~~</div> <br />我的name属性已经发生了变化,即使没有发生变化,我执行的插入操作,它也应该给我执行插入操作!也许是某个设置上有问题,但一直没有找到解法<br/><strong>问题补充</strong><br/><div class="quote_title">amwiacel 写道</div><div class="quote_div">看看你的save是怎么实现的</div> <br />兄弟,没用过hibernate吧!<br/><strong>问题补充</strong><br/><div class="quote_title">肉嘎嘎 写道</div><div class="quote_div"><div class="quote_title">xiexifeng113 写道</div><div class="quote_div"><div class="quote_title">肉嘎嘎 写道</div><div class="quote_div">为什么是修改,LZ说的修改是update吗?,你的代码上怎么没看出来有什么修改的啊?顶多就是又新增了10条数据!不解? <br /> <br />另外,对于save方法来说,当第一次持久化对象的时候,对象状态是从零时状态到了持久状态,这样数据库中存在了相应的记录(前10条记录),并且在缓存中保存了这10个对象和数据的快照,当你修改了循环次数,再次执行此方法的时候,由于你的属性没有任何改变,因此缓存快照的对象数据和你新创建的对象数据是一致的,所以在提交的时候,仅会对原有的数据重新做insert操作! <br /> <br />个人的分析,如有错误,请牛人指出,谢谢!~~~~~~</div> <br />我的name属性已经发生了变化,即使没有发生变化,我执行的插入操作,它也应该给我执行插入操作!也许是某个设置上有问题,但一直没有找到解法</div> <br /> <br />为什么没有变化也应该做插入操作呢?能说一下你的理由吗?</div> <br />你好好看一下主帖嘛!难道我没说明白。我是说执行之后的结果,仅仅是修改了name的值,其他的没有变化,包括id。而我确实是需要进行插入操作。两次执行完之后,数据库的表中应该有20条数据,即对应的name值从cat_0到cat_19,而现在表中只有十条数据cat_10到cat_19。希望后来的人能看明白。
问下各位大神,我刚学Hibernate,下载是我的第一个代码,为什么老链接报错,希望大神们解答一下
1.持久化类代码: package Model; import org.hibernate.HibernateException; import org.hibernate.Session; import org.hibernate.SessionFactory; import org.hibernate.Transaction; import org.hibernate.boot.registry.StandardServiceRegistryBuilder; import org.hibernate.cfg.Configuration; import org.hibernate.service.ServiceRegistry; import org.hibernate.service.ServiceRegistryBuilder; //开发持久化类 public class Connec_Base { private SessionFactory sessionFactory; private Session session; private Transaction trancaction; private Configuration conf; private ServiceRegistry serviceRegister; public void init(){ //创建配置对象 try { conf = new Configuration().configure(); } catch (HibernateException e) { System.out.println("创建配置对象失败"); e.printStackTrace(); } //创建服务注册对象 try { // serviceRegister = new StandardServiceRegistryBuilder(). // applySettings(conf.getProperties()).build(); serviceRegister=new ServiceRegistryBuilder().applySettings(conf.getProperties()).buildServiceRegistry(); } catch (Exception e) { System.out.println("创建服务注册对象失败"); e.printStackTrace(); } System.out.println(serviceRegister); try { //创建会话工厂对象 sessionFactory=conf.buildSessionFactory(serviceRegister); } catch (HibernateException e) { System.out.println("创建会话工厂对象失败"); e.printStackTrace(); } //会话对象 session=sessionFactory.openSession(); //开启事物 trancaction=session.beginTransaction(); } public void Destory(){ //开启事物 trancaction.commit(); //关闭会话 session.close(); //关闭会话工厂 sessionFactory.close(); } public void add(Student s){ init(); session.save(s); Destory(); } } 2.hibernate.cfg.xml代码: <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd"> <hibernate-configuration> <session-factory> <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property> <property name="hibernate.connection.url">jdbc:mysql://127.0.0.1:3306/text?useUnicode=true&amp;characterEncoding=UTF-8</property> <property name="hibernate.connection.username">root</property> <property name="hibernate.connection.password">ch2738</property> <!-- 显示sql语句 --> <property name="hibernate.show_sql">true</property> <!-- 自动创建表格 --> <property name="hibernate.hbm2ddl.auto">true</property> <!-- 方言:为每一种数据库提供适配器,方便转换 --> <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property> <mapping resource="Model/Student.hbm.xml"/> </session-factory> </hibernate-configuration> 3.Student.hbm.xml代码 <?xml version="1.0"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> <!-- Generated 2016-10-19 21:31:10 by Hibernate Tools 3.5.0.Final --> <hibernate-mapping> <class name="Student" table="STUDENT"> <id name="id" type="java.lang.String"> <column name="ID" /> <generator class="assigned" /> </id> <property name="name" type="java.lang.String"> <column name="NAME" /> </property> <property name="school" type="java.lang.String"> <column name="SCHOOL" /> </property> </class> </hibernate-mapping> ![代码结构图](https://img-ask.csdn.net/upload/201610/19/1476887581_62092.png) 3报错信息 十月 19, 2016 10:34:49 下午 org.hibernate.annotations.common.reflection.java.JavaReflectionManager <clinit> INFO: HCANN000001: Hibernate Commons Annotations {4.0.5.Final} 十月 19, 2016 10:34:49 下午 org.hibernate.Version logVersion INFO: HHH000412: Hibernate Core {4.3.11.Final} 十月 19, 2016 10:34:49 下午 org.hibernate.cfg.Environment <clinit> INFO: HHH000206: hibernate.properties not found 十月 19, 2016 10:34:49 下午 org.hibernate.cfg.Environment buildBytecodeProvider INFO: HHH000021: Bytecode provider name : javassist 十月 19, 2016 10:34:49 下午 org.hibernate.cfg.Configuration configure INFO: HHH000043: Configuring from resource: /hibernate.cfg.xml 十月 19, 2016 10:34:49 下午 org.hibernate.cfg.Configuration getConfigurationInputStream INFO: HHH000040: Configuration resource: /hibernate.cfg.xml 十月 19, 2016 10:34:49 下午 org.hibernate.cfg.Configuration addResource INFO: HHH000221: Reading mappings from resource: Model/Student.hbm.xml 十月 19, 2016 10:34:50 下午 org.hibernate.internal.util.xml.DTDEntityResolver resolveEntity WARN: HHH000223: Recognized obsolete hibernate namespace http://hibernate.sourceforge.net/. Use namespace http://www.hibernate.org/dtd/ instead. Refer to Hibernate 3.6 Migration Guide! 十月 19, 2016 10:34:50 下午 org.hibernate.cfg.Configuration doConfigure INFO: HHH000041: Configured SessionFactory: null org.hibernate.boot.registry.internal.StandardServiceRegistryImpl@184f6be2 十月 19, 2016 10:34:50 下午 org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl configure WARN: HHH000402: Using Hibernate built-in connection pool (not for production use!) 十月 19, 2016 10:34:50 下午 org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl buildCreator INFO: HHH000401: using driver [com.mysql.jdbc.Driver] at URL [jdbc:mysql://127.0.0.1:3306/text?useUnicode=true&characterEncoding=UTF-8] 十月 19, 2016 10:34:50 下午 org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl buildCreator INFO: HHH000046: Connection properties: {user=root, password=****} 十月 19, 2016 10:34:50 下午 org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl buildCreator INFO: HHH000006: Autocommit mode: false 十月 19, 2016 10:34:50 下午 org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl configure INFO: HHH000115: Hibernate connection pool size: 20 (min=1) 创建会话工厂对象失败 org.hibernate.exception.JDBCConnectionException: Error calling Driver#connect at org.hibernate.engine.jdbc.connections.internal.BasicConnectionCreator$1$1.convert(BasicConnectionCreator.java:122) at org.hibernate.engine.jdbc.connections.internal.BasicConnectionCreator.convertSqlException(BasicConnectionCreator.java:140) at org.hibernate.engine.jdbc.connections.internal.DriverConnectionCreator.makeConnection(DriverConnectionCreator.java:58) at org.hibernate.engine.jdbc.connections.internal.BasicConnectionCreator.createConnection(BasicConnectionCreator.java:75) at org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl.configure(DriverManagerConnectionProviderImpl.java:106) at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.configureService(StandardServiceRegistryImpl.java:111) at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:234) at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:206) at org.hibernate.engine.jdbc.internal.JdbcServicesImpl.buildJdbcConnectionAccess(JdbcServicesImpl.java:260) at org.hibernate.engine.jdbc.internal.JdbcServicesImpl.configure(JdbcServicesImpl.java:94) at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.configureService(StandardServiceRegistryImpl.java:111) at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:234) at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:206) at org.hibernate.cfg.Configuration.buildTypeRegistrations(Configuration.java:1887) at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1845) at Model.Connec_Base.init(Connec_Base.java:38) at Model.Connec_Base.add(Connec_Base.java:59) at Model.text.main(text.java:7) Caused by: java.sql.SQLException: Access denied for user 'root'@'localhost' (using password: YES) at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1073) at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3609) at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3541) at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:943) at com.mysql.jdbc.MysqlIO.secureAuth411(MysqlIO.java:4113) at com.mysql.jdbc.MysqlIO.doHandshake(MysqlIO.java:1308) at com.mysql.jdbc.ConnectionImpl.coreConnect(ConnectionImpl.java:2336) at com.mysql.jdbc.ConnectionImpl.connectOneTryOnly(ConnectionImpl.java:2369) at com.mysql.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:2153) at com.mysql.jdbc.ConnectionImpl.<init>(ConnectionImpl.java:792) at com.mysql.jdbc.JDBC4Connection.<init>(JDBC4Connection.java:47) at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source) at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source) at java.lang.reflect.Constructor.newInstance(Unknown Source) at com.mysql.jdbc.Util.handleNewInstance(Util.java:411) at com.mysql.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:381) at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:305) at org.hibernate.engine.jdbc.connections.internal.DriverConnectionCreator.makeConnection(DriverConnectionCreator.java:55) ... 15 more Exception in thread "main" java.lang.NullPointerException at Model.Connec_Base.init(Connec_Base.java:44) at Model.Connec_Base.add(Connec_Base.java:59) at Model.text.main(text.java:7)
spring2.5.6 hibernate3.3.2 annotation无法持久化entity
请教一下各位: <br /> <br />试了一下spring2.5.6 MVC + hibernate3.3.2的annotation组合,在持久化实体时,没有报错,日志也显示调用到了相应的操作,但是数据库中却没有数据...,不知道是哪里有问题<img src="/images/smiles/icon_sad.gif"/> ,代码如下: <br /> <br /><strong>applicationContext.xml</strong> <br /><pre name="code" class="java"> &lt;context:property-placeholder location="classpath:jdbc.properties"/&gt; &lt;bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close"&gt; &lt;property name="driverClass" value="${jdbc.driverClassName}"/&gt; &lt;property name="jdbcUrl" value="${jdbc.url}"/&gt; &lt;property name="user" value="${jdbc.username}"/&gt; &lt;property name="password" value="${jdbc.password}"/&gt; &lt;property name="minPoolSize"&gt;&lt;value&gt;10&lt;/value&gt;&lt;/property&gt; &lt;property name="maxPoolSize"&gt;&lt;value&gt;100&lt;/value&gt;&lt;/property&gt; &lt;property name="maxIdleTime"&gt;&lt;value&gt;1800&lt;/value&gt;&lt;/property&gt; &lt;property name="acquireIncrement"&gt;&lt;value&gt;2&lt;/value&gt;&lt;/property&gt; &lt;property name="maxStatements"&gt;&lt;value&gt;100&lt;/value&gt;&lt;/property&gt; &lt;property name="initialPoolSize"&gt;&lt;value&gt;10&lt;/value&gt;&lt;/property&gt; &lt;property name="idleConnectionTestPeriod"&gt;&lt;value&gt;1800&lt;/value&gt;&lt;/property&gt; &lt;property name="acquireRetryAttempts"&gt;&lt;value&gt;30&lt;/value&gt;&lt;/property&gt; &lt;property name="breakAfterAcquireFailure"&gt;&lt;value&gt;true&lt;/value&gt;&lt;/property&gt; &lt;property name="testConnectionOnCheckout"&gt;&lt;value&gt;false&lt;/value&gt;&lt;/property&gt; &lt;/bean&gt; &lt;bean id="sessionFactory" class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean"&gt; &lt;property name="dataSource" ref="dataSource"&gt;&lt;/property&gt; &lt;property name="annotatedClasses"&gt; &lt;list&gt; &lt;value&gt;com.zy.sa.test.entity.Userinfo&lt;/value&gt; &lt;/list&gt; &lt;/property&gt; &lt;!-- &lt;property name="packagesToScan" value="com.zy.sa.test.entity.*" /&gt; --&gt; &lt;property name="hibernateProperties"&gt; &lt;props&gt; &lt;prop key="hibernate.connection.provider_class"&gt;com.mchange.v2.c3p0.ComboPooledDataSource&lt;/prop&gt; &lt;prop key="hibernate.dialect"&gt;${hibernate_dialect}&lt;/prop&gt; &lt;prop key="hibernate.show_sql"&gt;${hibernate_show_sql}&lt;/prop&gt; &lt;prop key="hibernate.format_sql"&gt;true&lt;/prop&gt; &lt;prop key="hibernate.transcation.flush_before_completion"&gt;true&lt;/prop&gt; &lt;prop key="hibernate.generate_statistics"&gt;true&lt;/prop&gt; &lt;prop key="hibernate.connection.release_mode"&gt;auto&lt;/prop&gt; &lt;prop key="hibernate.autoReconnect"&gt;true&lt;/prop&gt; &lt;prop key="hibernate.bytecode.use_reflection_optimizer"&gt;true&lt;/prop&gt; &lt;/props&gt; &lt;/property&gt; &lt;/bean&gt; &lt;bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager" p:sessionFactory-ref="sessionFactory"/&gt; &lt;!-- 支持 @Transactional --&gt; &lt;tx:annotation-driven transaction-manager="transactionManager" proxy-target-class="true" /&gt; </pre> <br /> <br /><strong>annomvc-servlet.xml</strong> <br /><pre name="code" class="java"> &lt;!-- 对web包中的所有类进行扫描,以完成Bean创建和自动依赖注入的功能 --&gt; &lt;context:component-scan base-package="com.zy.sa.test" /&gt; &lt;context:annotation-config/&gt; &lt;!-- 启动Spring MVC的注解功能,完成请求和注解POJO的映射 --&gt; &lt;bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter" /&gt; &lt;!-- 对模型视图名称的解析,即在模型视图名称添加前后缀 --&gt; &lt;bean class="org.springframework.web.servlet.view.InternalResourceViewResolver" p:prefix="/WEB-INF/jsp/" p:suffix=".jsp" /&gt;</pre> <br /> <br /><strong>web.xml</strong> <br /> <br /><pre name="code" class="java">&lt;!-- Spring 服务层的配置文件 --&gt; &lt;context-param&gt; &lt;param-name&gt;contextConfigLocation&lt;/param-name&gt; &lt;param-value&gt;/WEB-INF/applicationContext.xml&lt;/param-value&gt; &lt;/context-param&gt; &lt;!-- 日志配置 --&gt; &lt;context-param&gt; &lt;param-name&gt;log4jConfigLocation&lt;/param-name&gt; &lt;param-value&gt;/WEF-INF/classes/log4j.properties&lt;/param-value&gt; &lt;/context-param&gt; &lt;!-- Spring 容器启动监听器 --&gt; &lt;listener&gt; &lt;listener-class&gt;org.springframework.web.context.ContextLoaderListener&lt;/listener-class&gt; &lt;/listener&gt; &lt;!-- 要负责处理由JavaBeans Introspector的使用而引起的缓冲泄露 --&gt; &lt;listener&gt; &lt;listener-class&gt;org.springframework.web.util.IntrospectorCleanupListener&lt;/listener-class&gt; &lt;/listener&gt; &lt;!-- 编码 --&gt; &lt;filter&gt; &lt;filter-name&gt;encodingFilter&lt;/filter-name&gt; &lt;filter-class&gt;org.springframework.web.filter.CharacterEncodingFilter&lt;/filter-class&gt; &lt;init-param&gt; &lt;param-name&gt;encoding&lt;/param-name&gt; &lt;param-value&gt;UTF-8&lt;/param-value&gt; &lt;/init-param&gt; &lt;init-param&gt; &lt;param-name&gt;forceEncoding&lt;/param-name&gt; &lt;param-value&gt;true&lt;/param-value&gt; &lt;/init-param&gt; &lt;/filter&gt; &lt;!-- Hibernate Open Session In View --&gt; &lt;filter&gt; &lt;filter-name&gt;hibernateFilter&lt;/filter-name&gt; &lt;filter-class&gt;org.springframework.orm.hibernate3.support.OpenSessionInViewFilter&lt;/filter-class&gt; &lt;/filter&gt; &lt;!-- Hibernate Open Session In View --&gt; &lt;filter-mapping&gt; &lt;filter-name&gt;hibernateFilter&lt;/filter-name&gt; &lt;url-pattern&gt;/*&lt;/url-pattern&gt; &lt;/filter-mapping&gt; &lt;!-- 编码 --&gt; &lt;filter-mapping&gt; &lt;filter-name&gt;encodingFilter&lt;/filter-name&gt; &lt;url-pattern&gt;*.jsp&lt;/url-pattern&gt; &lt;/filter-mapping&gt; &lt;!-- Spring MVC 的Servlet,它将加载WEB-INF/annomvc-servlet.xml 的配置文件,以启动Spring MVC模块--&gt; &lt;servlet&gt; &lt;servlet-name&gt;annomvc&lt;/servlet-name&gt; &lt;servlet-class&gt;org.springframework.web.servlet.DispatcherServlet&lt;/servlet-class&gt; &lt;load-on-startup&gt;2&lt;/load-on-startup&gt; &lt;/servlet&gt; &lt;servlet-mapping&gt; &lt;servlet-name&gt;annomvc&lt;/servlet-name&gt; &lt;url-pattern&gt;*.do&lt;/url-pattern&gt; &lt;/servlet-mapping&gt; &lt;welcome-file-list&gt; &lt;welcome-file&gt;index.html&lt;/welcome-file&gt; &lt;welcome-file&gt;index.htm&lt;/welcome-file&gt; &lt;welcome-file&gt;index.jsp&lt;/welcome-file&gt; &lt;welcome-file&gt;default.html&lt;/welcome-file&gt; &lt;welcome-file&gt;default.htm&lt;/welcome-file&gt; &lt;welcome-file&gt;default.jsp&lt;/welcome-file&gt; &lt;/welcome-file-list&gt; &lt;error-page&gt; &lt;exception-type&gt;java.lang.Exception&lt;/exception-type&gt; &lt;location&gt;/WEB-INF/common/uncaughtException.jsp&lt;/location&gt; &lt;/error-page&gt; &lt;error-page&gt; &lt;error-code&gt;403&lt;/error-code&gt; &lt;location&gt;/WEB-INF/common/403.jsp&lt;/location&gt; &lt;/error-page&gt; &lt;error-page&gt; &lt;error-code&gt;404&lt;/error-code&gt; &lt;location&gt;/WEB-INF/common/404.jsp&lt;/location&gt; &lt;/error-page&gt; &lt;error-page&gt; &lt;error-code&gt;500&lt;/error-code&gt; &lt;location&gt;/WEB-INF/common/500.jsp&lt;/location&gt; &lt;/error-page&gt;</pre> <br /> <br /><strong>MyController.java</strong> <br /> <br /><pre name="code" class="java">@Controller @RequestMapping("/my.do") public class MyController { @Autowired private UserinfoService userinfoService; @RequestMapping public String my(Userinfo user) { System.out.println("my.do"); System.out.println("userinfoService: " + userinfoService); System.out.println(user); userinfoService.createUserInfo(user); return "userinfo_create"; } }</pre> <br /> <br /> <br /><strong>UserinfoServiceImpl.java</strong> <br /> <br /><pre name="code" class="java">@Service @Transactional public class UserinfoServiceImpl implements UserinfoService { @Autowired private UserinfoDao userinfoDao; @Override @Transactional(readOnly=false, propagation=Propagation.REQUIRED) public void createUserInfo(Userinfo user) { Userinfo userinfo = new Userinfo(); userinfo.setId("ww"); userinfo.setUserName("wangwu"); userinfo.setPassword("111"); userinfo.setEmail("ww@aaa.com"); userinfoDao.save(userinfo); userinfoDao.getSession().save(userinfo); } @Override @Transactional(readOnly=true) public List&lt;Userinfo&gt; getAllUser() { return userinfoDao.getAll(); }</pre> <br /> <br /><strong>UserinfoDao.java</strong> <br /><pre name="code" class="java">@Repository public class UserinfoDao extends HibernateDao&lt;Userinfo, String&gt; { @Override @Autowired public void setSessionFactory(SessionFactory sessionFactory) { logger.info("sessionFactory: " + sessionFactory); super.setSessionFactory(sessionFactory); } }</pre> <br /> <br /><strong>HibernateDao.java</strong> <br /> <br /><pre name="code" class="java"> public Session getSession() { return sessionFactory.getCurrentSession(); } public void save(final T entity) { Assert.notNull(entity, "entity不能为空"); getSession().saveOrUpdate(entity); logger.debug("save entity: {}", entity); } </pre> <br /> <br />通过:http://localhost:8080/springannotation/my.do?id=lisi&amp;userName=ls&amp;password=111&amp;email=ls@aaa.com访问,控制台打印出了实体信息,但数据库无数据,不知道问题出在哪里?<img src="/images/smiles/icon_razz.gif"/> <br/><strong>问题补充</strong><br/>没人帮忙看一下啊 <br />
类似于微博 用户最后一条动态的查询
<p>有一个用户动态表 feed :</p> <p><img src="http://dl.iteye.com/upload/attachment/0073/1587/0fad367c-6d81-3406-b530-b16f10dc4a31.png" alt=""></p> <p>user_who_id和user_whose_id都是user表的外键 指向user表 </p> <p>一个好友关注表 concern :</p> <p><img src="http://dl.iteye.com/upload/attachment/0073/1589/3ef92829-984e-3491-943a-8bd9d2848481.png" alt=""></p> <p>fans_id和follow_id都是user表的外键 指向user表</p> <p> </p> <p>这个时候我需要查询出所有我关注的好友,并显示他们的最后一条动态.</p> <p><br><img src="http://dl.iteye.com/upload/attachment/0073/1593/298c5545-9b8b-32a7-9d10-537e86889045.png" alt=""></p> <p>类似于上面这种形式.</p> <p>之前的一种做法是 查出好友,然后根据好友id去查询出好友最后一条动态,然后塞到好友对象中,也就是在concern中加一个不持久化的属性  lastFeed</p> <p>这样的话还好做些,但是有个需求就是<strong>根据好友最后动态的更新时间</strong>来进行我好友的排序.</p> <p> </p> <p>之前的做法就是根据我的好友进行分组查出好友最后一条动态 并根据动态创建时间排序.</p> <p> </p> <pre name="code" class="java">select f3 from Feed f3 where f3.id in(select max(f2.id) from Feed f2 where f2.id in(select f1.id from Feed f1 where f1.who.id in(select c.follow.id from Concern c where c.fans.id=&lt;我&gt; and c.isFriends=1) order by f1.id desc) group by f2.who.id) order by f3.id desc</pre> <p> </p> <p> 然后再根据动态中的user_who_id(动态的产生者)去查询concern,然后再将lastFeed放到concern中传到前台.</p> <p>这样做感觉很烂,效率不好,而且很麻烦.</p> <p> </p> <p> </p> <p>后来想到一种做法,就是在 user表中加一个字段 last_feed_id 就是用户的最后一条动态的id.是个外键.相当于user表示子表,feed表就是主表.</p> <p> </p> <p>这样查询很方便,hibernate中直接concern.follow.lastFeed即可.</p> <p>排序的话根据lastFeed的时间排序即可.</p> <p> </p> <p>但是目前遇到的问题就是更新时很麻烦,例如(用户评论了一篇文章) 如果这篇文章被删除,那么相应的评论动态都要删掉.这时候就需要更新user表的最后一条动态.</p> <p>因为Feed表这时是主表,user变成从表,删除feed时 可能会有外间约束,删不掉.还必须先解除外间关系,再删feed,然后再查询出最后一条动态,更新到user表中.</p> <p> </p> <p>感觉这两种都不咋地啊,有没有别的更好的设计方法?</p> <p> </p> <p> </p> <p> </p>
SpringMVC注入失败
SpringMVC+hibernate 在main中使用代码测试可以得到正确的对象,代码如下 [code="java"]public static void main(String[] args) { ApplicationContext ctx=new ClassPathXmlApplicationContext("applicationContext.xml"); ForumService fs=(ForumService)ctx.getBean("forumService"); System.out.println(fs); BoardController bc=(BoardController)ctx.getBean("boardController"); System.out.println(bc+"注入了:"+bc.getForumService()); } [/code] 可得到bc内的forumService和fs是同一个对象,注入正常 但是用tomcat启动web项目后总是提示controller内的forumService对象为NULL 下面是xml配置文件 [code="java"] <?xml version="1.0" encoding="UTF-8"?> <!-- 指定Spring配置文件的Schema信息 --> <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: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/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.0.xsd"> <!-- 定义数据源Bean,使用C3P0数据源实现 --> <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close"> <!-- 指定连接数据库的驱动 --> <property name="driverClass" value="com.mysql.jdbc.Driver" /> <!-- 指定连接数据库的URL --> <property name="jdbcUrl" value="jdbc:mysql://localhost:3306/bbs" /> <!-- 指定连接数据库的用户名 --> <property name="user" value="root" /> <!-- 指定连接数据库的密码 --> <property name="password" value="19871013" /> <!-- 指定连接数据库连接池的最大连接数 --> <property name="maxPoolSize" value="20" /> <!-- 指定连接数据库连接池的最小连接数 --> <property name="minPoolSize" value="1" /> <!-- 指定连接数据库连接池的初始化连接数 --> <property name="initialPoolSize" value="1" /> <!-- 指定连接数据库连接池的连接的最大空闲时间 --> <property name="maxIdleTime" value="20" /> </bean> <!-- 定义Hibernate的SessionFactory --> <bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean"> <!-- 依赖注入数据源,注入正是上面定义的dataSource --> <property name="dataSource" ref="dataSource" /> <!-- mappingResouces属性用来列出全部映射文件 --> <property name="mappingResources"> <list> <!-- 以下用来列出Hibernate映射文件 --> <value>wyc/bbs/model/Board.hbm.xml</value> </list> </property> <!-- 定义Hibernate的SessionFactory的属性 --> <property name="hibernateProperties"> <props> <!-- 指定数据库方言 --> <prop key="hibernate.dialect"> org.hibernate.dialect.MySQLDialect </prop> <!-- 是否根据需要每次自动创建数据库 --> <prop key="hibernate.hbm2ddl.auto">update</prop> <!-- 显示Hibernate持久化操作所生成的SQL --> <prop key="hibernate.show_sql">true</prop> <!-- 将SQL脚本进行格式化后再输出 --> <prop key="hibernate.format_sql">true</prop> <prop key="javax.persistence.validation.mode">none</prop> </props> </property> </bean> <bean id="boardDao" class="wyc.bbs.dao.BoardDao"> <property name="sessionFactory" ref="sessionFactory"></property> </bean> <bean id="forumService" class="wyc.bbs.service.ForumService"> <property name="boardDao" ref="boardDao"></property> </bean> <bean id="boardController" class="wyc.bbs.web.BoardController"> <property name="forumService" ref="forumService"></property> </bean> </beans> [/code]
Java学习的正确打开方式
在博主认为,对于入门级学习java的最佳学习方法莫过于视频+博客+书籍+总结,前三者博主将淋漓尽致地挥毫于这篇博客文章中,至于总结在于个人,实际上越到后面你会发现学习的最好方式就是阅读参考官方文档其次就是国内的书籍,博客次之,这又是一个层次了,这里暂时不提后面再谈。博主将为各位入门java保驾护航,各位只管冲鸭!!!上天是公平的,只要不辜负时间,时间自然不会辜负你。 何谓学习?博主所理解的学习,它是一个过程,是一个不断累积、不断沉淀、不断总结、善于传达自己的个人见解以及乐于分享的过程。
程序员必须掌握的核心算法有哪些?
由于我之前一直强调数据结构以及算法学习的重要性,所以就有一些读者经常问我,数据结构与算法应该要学习到哪个程度呢?,说实话,这个问题我不知道要怎么回答你,主要取决于你想学习到哪些程度,不过针对这个问题,我稍微总结一下我学过的算法知识点,以及我觉得值得学习的算法。这些算法与数据结构的学习大多数是零散的,并没有一本把他们全部覆盖的书籍。下面是我觉得值得学习的一些算法以及数据结构,当然,我也会整理一些看过...
有哪些让程序员受益终生的建议
从业五年多,辗转两个大厂,出过书,创过业,从技术小白成长为基层管理,联合几个业内大牛回答下这个问题,希望能帮到大家,记得帮我点赞哦。 敲黑板!!!读了这篇文章,你将知道如何才能进大厂,如何实现财务自由,如何在工作中游刃有余,这篇文章很长,但绝对是精品,记得帮我点赞哦!!!! 一腔肺腑之言,能看进去多少,就看你自己了!!! 目录: 在校生篇: 为什么要尽量进大厂? 如何选择语言及方...
大学四年自学走来,这些私藏的实用工具/学习网站我贡献出来了
大学四年,看课本是不可能一直看课本的了,对于学习,特别是自学,善于搜索网上的一些资源来辅助,还是非常有必要的,下面我就把这几年私藏的各种资源,网站贡献出来给你们。主要有:电子书搜索、实用工具、在线视频学习网站、非视频学习网站、软件下载、面试/求职必备网站。 注意:文中提到的所有资源,文末我都给你整理好了,你们只管拿去,如果觉得不错,转发、分享就是最大的支持了。 一、电子书搜索 对于大部分程序员...
linux系列之常用运维命令整理笔录
本博客记录工作中需要的linux运维命令,大学时候开始接触linux,会一些基本操作,可是都没有整理起来,加上是做开发,不做运维,有些命令忘记了,所以现在整理成博客,当然vi,文件操作等就不介绍了,慢慢积累一些其它拓展的命令,博客不定时更新 free -m 其中:m表示兆,也可以用g,注意都要小写 Men:表示物理内存统计 total:表示物理内存总数(total=used+free) use...
比特币原理详解
一、什么是比特币 比特币是一种电子货币,是一种基于密码学的货币,在2008年11月1日由中本聪发表比特币白皮书,文中提出了一种去中心化的电子记账系统,我们平时的电子现金是银行来记账,因为银行的背后是国家信用。去中心化电子记账系统是参与者共同记账。比特币可以防止主权危机、信用风险。其好处不多做赘述,这一层面介绍的文章很多,本文主要从更深层的技术原理角度进行介绍。 二、问题引入 假设现有4个人...
程序员接私活怎样防止做完了不给钱?
首先跟大家说明一点,我们做 IT 类的外包开发,是非标品开发,所以很有可能在开发过程中会有这样那样的需求修改,而这种需求修改很容易造成扯皮,进而影响到费用支付,甚至出现做完了项目收不到钱的情况。 那么,怎么保证自己的薪酬安全呢? 我们在开工前,一定要做好一些证据方面的准备(也就是“讨薪”的理论依据),这其中最重要的就是需求文档和验收标准。一定要让需求方提供这两个文档资料作为开发的基础。之后开发...
网页实现一个简单的音乐播放器(大佬别看。(⊙﹏⊙))
今天闲着无事,就想写点东西。然后听了下歌,就打算写个播放器。 于是乎用h5 audio的加上js简单的播放器完工了。 演示地点演示 html代码如下` music 这个年纪 七月的风 音乐 ` 然后就是css`*{ margin: 0; padding: 0; text-decoration: none; list-...
Python十大装B语法
Python 是一种代表简单思想的语言,其语法相对简单,很容易上手。不过,如果就此小视 Python 语法的精妙和深邃,那就大错特错了。本文精心筛选了最能展现 Python 语法之精妙的十个知识点,并附上详细的实例代码。如能在实战中融会贯通、灵活使用,必将使代码更为精炼、高效,同时也会极大提升代码B格,使之看上去更老练,读起来更优雅。
数据库优化 - SQL优化
以实际SQL入手,带你一步一步走上SQL优化之路!
2019年11月中国大陆编程语言排行榜
2019年11月2日,我统计了某招聘网站,获得有效程序员招聘数据9万条。针对招聘信息,提取编程语言关键字,并统计如下: 编程语言比例 rank pl_ percentage 1 java 33.62% 2 cpp 16.42% 3 c_sharp 12.82% 4 javascript 12.31% 5 python 7.93% 6 go 7.25% 7 p...
通俗易懂地给女朋友讲:线程池的内部原理
餐盘在灯光的照耀下格外晶莹洁白,女朋友拿起红酒杯轻轻地抿了一小口,对我说:“经常听你说线程池,到底线程池到底是个什么原理?”
《奇巧淫技》系列-python!!每天早上八点自动发送天气预报邮件到QQ邮箱
将代码部署服务器,每日早上定时获取到天气数据,并发送到邮箱。 也可以说是一个小型人工智障。 知识可以运用在不同地方,不一定非是天气预报。
经典算法(5)杨辉三角
杨辉三角 是经典算法,这篇博客对它的算法思想进行了讲解,并有完整的代码实现。
英特尔不为人知的 B 面
从 PC 时代至今,众人只知在 CPU、GPU、XPU、制程、工艺等战场中,英特尔在与同行硬件芯片制造商们的竞争中杀出重围,且在不断的成长进化中,成为全球知名的半导体公司。殊不知,在「刚硬」的背后,英特尔「柔性」的软件早已经做到了全方位的支持与支撑,并持续发挥独特的生态价值,推动产业合作共赢。 而对于这一不知人知的 B 面,很多人将其称之为英特尔隐形的翅膀,虽低调,但是影响力却不容小觑。 那么,在...
腾讯算法面试题:64匹马8个跑道需要多少轮才能选出最快的四匹?
昨天,有网友私信我,说去阿里面试,彻底的被打击到了。问了为什么网上大量使用ThreadLocal的源码都会加上private static?他被难住了,因为他从来都没有考虑过这个问题。无独有偶,今天笔者又发现有网友吐槽了一道腾讯的面试题,我们一起来看看。 腾讯算法面试题:64匹马8个跑道需要多少轮才能选出最快的四匹? 在互联网职场论坛,一名程序员发帖求助到。二面腾讯,其中一个算法题:64匹...
面试官:你连RESTful都不知道我怎么敢要你?
干货,2019 RESTful最贱实践
为啥国人偏爱Mybatis,而老外喜欢Hibernate/JPA呢?
关于SQL和ORM的争论,永远都不会终止,我也一直在思考这个问题。昨天又跟群里的小伙伴进行了一番讨论,感触还是有一些,于是就有了今天这篇文。 声明:本文不会下关于Mybatis和JPA两个持久层框架哪个更好这样的结论。只是摆事实,讲道理,所以,请各位看官勿喷。 一、事件起因 关于Mybatis和JPA孰优孰劣的问题,争论已经很多年了。一直也没有结论,毕竟每个人的喜好和习惯是大不相同的。我也看...
白话阿里巴巴Java开发手册高级篇
不久前,阿里巴巴发布了《阿里巴巴Java开发手册》,总结了阿里巴巴内部实际项目开发过程中开发人员应该遵守的研发流程规范,这些流程规范在一定程度上能够保证最终的项目交付质量,通过在时间中总结模式,并推广给广大开发人员,来避免研发人员在实践中容易犯的错误,确保最终在大规模协作的项目中达成既定目标。 无独有偶,笔者去年在公司里负责升级和制定研发流程、设计模板、设计标准、代码标准等规范,并在实际工作中进行...
SQL-小白最佳入门sql查询一
不要偷偷的查询我的个人资料,即使你再喜欢我,也不要这样,真的不好;
redis分布式锁,面试官请随便问,我都会
文章有点长并且绕,先来个图片缓冲下! 前言 现在的业务场景越来越复杂,使用的架构也就越来越复杂,分布式、高并发已经是业务要求的常态。像腾讯系的不少服务,还有CDN优化、异地多备份等处理。 说到分布式,就必然涉及到分布式锁的概念,如何保证不同机器不同线程的分布式锁同步呢? 实现要点 互斥性,同一时刻,智能有一个客户端持有锁。 防止死锁发生,如果持有锁的客户端崩溃没有主动释放锁,也要保证锁可以正常释...
项目中的if else太多了,该怎么重构?
介绍 最近跟着公司的大佬开发了一款IM系统,类似QQ和微信哈,就是聊天软件。我们有一部分业务逻辑是这样的 if (msgType = "文本") { // dosomething } else if(msgType = "图片") { // doshomething } else if(msgType = "视频") { // doshomething } else { // doshom...
Nginx 原理和架构
Nginx 是一个免费的,开源的,高性能的 HTTP 服务器和反向代理,以及 IMAP / POP3 代理服务器。Nginx 以其高性能,稳定性,丰富的功能,简单的配置和低资源消耗而闻名。 Nginx 的整体架构 Nginx 里有一个 master 进程和多个 worker 进程。master 进程并不处理网络请求,主要负责调度工作进程:加载配置、启动工作进程及非停升级。worker 进程负责处...
Python 编程开发 实用经验和技巧
Python是一门很灵活的语言,也有很多实用的方法,有时候实现一个功能可以用多种方法实现,我这里总结了一些常用的方法和技巧,包括小数保留指定位小数、判断变量的数据类型、类方法@classmethod、制表符中文对齐、遍历字典、datetime.timedelta的使用等,会持续更新......
YouTube排名第一的励志英文演讲《Dream(梦想)》
Idon’t know what that dream is that you have, I don't care how disappointing it might have been as you've been working toward that dream,but that dream that you’re holding in your mind, that it’s po...
“狗屁不通文章生成器”登顶GitHub热榜,分分钟写出万字形式主义大作
一、垃圾文字生成器介绍 最近在浏览GitHub的时候,发现了这样一个骨骼清奇的雷人项目,而且热度还特别高。 项目中文名:狗屁不通文章生成器 项目英文名:BullshitGenerator 根据作者的介绍,他是偶尔需要一些中文文字用于GUI开发时测试文本渲染,因此开发了这个废话生成器。但由于生成的废话实在是太过富于哲理,所以最近已经被小伙伴们给玩坏了。 他的文风可能是这样的: 你发现,...
程序员:我终于知道post和get的区别
是一个老生常谈的话题,然而随着不断的学习,对于以前的认识有很多误区,所以还是需要不断地总结的,学而时习之,不亦说乎
《程序人生》系列-这个程序员只用了20行代码就拿了冠军
你知道的越多,你不知道的越多 点赞再看,养成习惯GitHub上已经开源https://github.com/JavaFamily,有一线大厂面试点脑图,欢迎Star和完善 前言 这一期不算《吊打面试官》系列的,所有没前言我直接开始。 絮叨 本来应该是没有这期的,看过我上期的小伙伴应该是知道的嘛,双十一比较忙嘛,要值班又要去帮忙拍摄年会的视频素材,还得搞个程序员一天的Vlog,还要写BU...
加快推动区块链技术和产业创新发展,2019可信区块链峰会在京召开
11月8日,由中国信息通信研究院、中国通信标准化协会、中国互联网协会、可信区块链推进计划联合主办,科技行者协办的2019可信区块链峰会将在北京悠唐皇冠假日酒店开幕。   区块链技术被认为是继蒸汽机、电力、互联网之后,下一代颠覆性的核心技术。如果说蒸汽机释放了人类的生产力,电力解决了人类基本的生活需求,互联网彻底改变了信息传递的方式,区块链作为构造信任的技术有重要的价值。   1...
Java世界最常用的工具类库
Apache Commons Apache Commons有很多子项目 Google Guava 参考博客
程序员把地府后台管理系统做出来了,还有3.0版本!12月7号最新消息:已在开发中有github地址
第一幕:缘起 听说阎王爷要做个生死簿后台管理系统,我们派去了一个程序员…… 996程序员做的梦: 第一场:团队招募 为了应对地府管理危机,阎王打算找“人”开发一套地府后台管理系统,于是就在地府总经办群中发了项目需求。 话说还是中国电信的信号好,地府都是满格,哈哈!!! 经常会有外行朋友问:看某网站做的不错,功能也简单,你帮忙做一下? 而这次,面对这样的需求,这个程序员...
网易云6亿用户音乐推荐算法
网易云音乐是音乐爱好者的集聚地,云音乐推荐系统致力于通过 AI 算法的落地,实现用户千人千面的个性化推荐,为用户带来不一样的听歌体验。 本次分享重点介绍 AI 算法在音乐推荐中的应用实践,以及在算法落地过程中遇到的挑战和解决方案。 将从如下两个部分展开: AI算法在音乐推荐中的应用 音乐场景下的 AI 思考 从 2013 年 4 月正式上线至今,网易云音乐平台持续提供着:乐屏社区、UGC...
8年经验面试官详解 Java 面试秘诀
作者 |胡书敏 责编 | 刘静 出品 | CSDN(ID:CSDNnews) 本人目前在一家知名外企担任架构师,而且最近八年来,在多家外企和互联网公司担任Java技术面试官,前后累计面试了有两三百位候选人。在本文里,就将结合本人的面试经验,针对Java初学者、Java初级开发和Java开发,给出若干准备简历和准备面试的建议。 Java程序员准备和投递简历的实...
面试官如何考察你的思维方式?
1.两种思维方式在求职面试中,经常会考察这种问题:北京有多少量特斯拉汽车?某胡同口的煎饼摊一年能卖出多少个煎饼?深圳有多少个产品经理?一辆公交车里能装下多少个乒乓球?一个正常成年人有多少根头发?这类估算问题,被称为费米问题,是以科学家费米命名的。为什么面试会问这种问题呢?这类问题能把两类人清楚地区分出来。一类是具有文科思维的人,擅长赞叹和模糊想象,它主要依靠的是人的第一反应和直觉,比如小孩...
全网阅读过20k的Java集合框架常见面试题总结!
本文为 SnailClimb 的原创,目前已经收录自我开源的 JavaGuide 中(61.5 k Star!【Java学习 面试指南】 一份涵盖大部分Java程序员所需要掌握的核心知识。欢迎 Star!)。 文末有我的公众号,公众号里有我最新整理的Java学习资料,免费分享。 这么好的文章,一定好先赞后看!!!建议养成这个好习惯!!爱你们!???? 剖析面试最常见问题之Java集合框架 当了...
17张图带你解析红黑树的原理!保证你能看懂!
二叉查找树 由于红黑树本质上就是一棵二叉查找树,所以在了解红黑树之前,咱们先来看下二叉查找树。 二叉查找树(Binary Search Tree),也称有序二叉树(ordered binary tree),排序二叉树(sorted binary tree),是指一棵空树或者具有下列性质的二叉树: 若任意结点的左子树不空,则左子树上所有结点的值均小于它的根结点的值; 若任意结点的...
so easy! 10行代码写个"狗屁不通"文章生成器
前几天,GitHub 有个开源项目特别火,只要输入标题就可以生成一篇长长的文章。 背后实现代码一定很复杂吧,里面一定有很多高深莫测的机器学习等复杂算法 不过,当我看了源代码之后 这程序不到50行 尽管我有多年的Python经验,但我竟然一时也没有看懂 当然啦,原作者也说了,这个代码也是在无聊中诞生的,平时撸码是不写中文变量名的, 中文...
知乎高赞:中国有什么拿得出手的开源软件产品?(整理自本人原创回答)
知乎高赞:中国有什么拿得出手的开源软件产品? 在知乎上,有个问题问“中国有什么拿得出手的开源软件产品(在 GitHub 等社区受欢迎度较好的)?” 事实上,还不少呢~ 本人于2019.7.6进行了较为全面的回答,对这些受欢迎的 Github 开源项目分类整理如下: 分布式计算、云平台相关工具类 1.SkyWalking,作者吴晟、刘浩杨 等等 仓库地址: apache/skywalking 更...
MySQL数据库总结
一、数据库简介 数据库(Database,DB)是按照数据结构来组织,存储和管理数据的仓库。 典型特征:数据的结构化、数据间的共享、减少数据的冗余度,数据的独立性。 关系型数据库:使用关系模型把数据组织到数据表(table)中。现实世界可以用数据来描述。 主流的关系型数据库产品:Oracle(Oracle)、DB2(IBM)、SQL Server(MS)、MySQL(Oracle)。 数据表:数...
相关热词 c# 图片上传 c# gdi 占用内存 c#中遍历字典 c#控制台模拟dos c# 斜率 最小二乘法 c#进程延迟 c# mysql完整项目 c# grid 总行数 c# web浏览器插件 c# xml 生成xsd
立即提问