2个问题,第一个问题
如何在hibernate.cfg.xml 中配置,能够在console跟踪载入hibernate资源情况。
如下面的信息提示:INFO: using java.io streams to persist binary types
Jan 8, 2004 11:44:58 AM net.sf.hibernate.cfg.Environment <clinit>
INFO: using CGLIB reflection optimizer
Jan 8, 2004 11:44:58 AM net.sf.hibernate.cfg.Configuration addClass
INFO: Mapping resource: custdb/hibernate/CustomerStatu.hbm.xml
Jan 8, 2004 11:44:59 AM net.sf.hibernate.cfg.Binder bindRootClass
INFO: Mapping class: custdb.hibernate.CustomerStatu -> customer_status
Jan 8, 2004 11:45:00 AM net.sf.hibernate.cfg.Configuration addClass
INFO: Mapping resource: custdb/hibernate/Customer.hbm.xml
Jan 8, 2004 11:45:00 AM net.sf.hibernate.cfg.Binder bindRootClass
INFO: Mapping class: custdb.hibernate.Customer -> customers
Jan 8, 2004 11:45:00 AM net.sf.hibernate.cfg.Configuration secondPassCompile
INFO: processing one-to-many association mappings
Jan 8, 2004 11:45:00 AM net.sf.hibernate.cfg.Binder bindCollectionSecondPass
INFO: Mapping collection: custdb.hibernate.CustomerStatu.customers -> customers问题2:在many-to-one 中,我遇到了一个插入问题。
2张表.message,user .1个user :n个message
建表的SQL语句如下CREATE TABLE `user` (  `usr_id` int(11) NOT NULL auto_increment,  `usr_name` char(20) default NULL,  `usr_psw` char(20) default NULL,  PRIMARY KEY  (`usr_id`)) ENGINE=InnoDB DEFAULT CHARSET=UTF8; CREATE TABLE `message` (  `msg_id` int(11) NOT NULL auto_increment,  `msg_ttl` char(20) NOT NULL default 0,  `msg_desc` char(50) default NULL,  `msg_date` Date,  `usr_id` int(11)NOT NULL default 0,  PRIMARY KEY  (`msg_id`)) ENGINE=InnoDB DEFAULT CHARSET=UTF8;
/*********************************************************************/
Model文件 *.java  //message,user
// 
/*******  UserInfo.java *******/
private int userId;private String name;private String password;private Set messages;/*******  Message.java *******/
private int msgId;private String ttl;private String desc;private Date date;private UserInfo user;
/******* End *******/
配置文件 *.hbm.Xml //Message.hbm.xml,UserInfo.hbm.xml/******* Message.hbm.xml *******/
<class name="Message" table="message">
<id name="msgId" type="int" column="msg_id">
<generator class="native" />
</id>
<property name="ttl" column="msg_ttl" type="string" not-null="true" />
<property name="desc" column="msg_desc" type="string"
not-null="true" />
<property name="date" column="msg_date" type="string" />
<many-to-one name="user" class="UserInfo" column="usr_id" cascade="none"/>
</class>
/******* UserInfo.hbm.xml *******/
<class name="UserInfo" table="USER">
<id name="userId" type="int" column="usr_id">
<generator class="native" />
</id>
<property name="name" column="usr_name" type="string" />
<property name="password" column="usr_psw" type="string" />
<set name="messages" order-by="usr_id" cascade="all">
<key column="usr_id" />
<one-to-many class="Message" />
</set>
</class> UserInfo user= new UserInfo();//user    user.setName("xuaxua");
    user.setPassword("xuaxua");
    user.setUserId(10);
    Set<Message> msgs = new HashSet<Message>();
    Message msg = new Message();// message0
    Message msg1 = new Message();// message1
    msg.setTtl("msg_xuaxua");
    msg.setDesc("dec");
    msgs.add(msg);
    msg1.setTtl("msg_xiaochun");
    
    msg1.setDesc("asc");
    
    msgs.add(msg1);    user.setMessages(msgs);    msg.setUser(user);
如果我只添加1个user添加1个message的时候。程序运行正常
如果我在多对一的情况1个user添加多个message的时候。即Set<Message> msgs 中有2个message时候。出现了下面错误
Column 'usr_id' cannot be null

解决方案 »

  1.   

    <many-to-one name="user" class="UserInfo" column="usr_id" cascade="none"/>改为:<many-to-one name="user" class="UserInfo" column="usr_id" />
    <set name="messages" order-by="usr_id" cascade="all">
            <key column="usr_id" />
            <one-to-many class="Message" />
        </set>
    改为:<set name="messages" order-by="usr_id" inverse="true" cascade="all">
            <key column="usr_id" />
            <one-to-many class="Message" />
        </set>看看
      

  2.   

    问题1用下面的log4j.properties就可以了:# Direct log messages to stdout
    log4j.appender.stdout=org.apache.log4j.ConsoleAppender
    log4j.appender.stdout.Target=System.out
    log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
    log4j.appender.stdout.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n# Root logger option
    log4j.rootLogger=WARN, stdout# Hibernate logging options (INFO only shows startup messages)
    log4j.logger.org.hibernate=INFO# Log JDBC bind parameter runtime arguments
    log4j.logger.org.hibernate.type=DEBUG问题2是因为少写了:
     msg1.setUser(user);
      

  3.   

    谢谢几位回答。问题已解决。不用修改任何java代码,只要将表CREATE TABLE `message` (  `msg_id` int(11) NOT NULL auto_increment,  `msg_ttl` char(20) NOT NULL default 0,  `msg_desc` char(50) default NULL,  `msg_date` Date,  `usr_id` int(11)NOT NULL default 0,
    //NOT NULL去掉,问题就解决了。并且我执行了结果返回正确   PRIMARY KEY  (`msg_id`)) ENGINE=InnoDB DEFAULT CHARSET=UTF8;