struts1.2+spring2.5+hibernate3.1当user表的name字段是另一张表bank的一个外键时就出表现访问异常:HTTP Status 404 - Servlet action is not available当user表的name字段不是另一个表bank的一个外键时的User.hbm.xml(可以正常访问)
create table user
(
    name     VARCHAR(50) primary key,
    pwd      VARCHAR(50)
);
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<!-- 
    Mapping file autogenerated by MyEclipse Persistence Tools
-->
<hibernate-mapping>
    <class name="com.sms.po.User" table="user" catalog="sms">
        <id name="name" type="java.lang.String">
            <column name="name" length="50" />
            <generator class="native"></generator>
        </id>
        <property name="pwd" type="java.lang.String">
            <column name="pwd" length="50" />
        </property>
    </class>
</hibernate-mapping>当user表中的字段name是另一张表bank的外键时的User.hbm.xml(不可访问:HTTP Status 404 - Servlet action is not available)create table user
(
    name     VARCHAR(50) primary key,
    pwd      VARCHAR(50)
);create table bank
(
    count            VARCHAR(50) primary key,
    name     VARCHAR(50),
    balance     VARCHAR(50),
    foreign key (name) references user(name) on delete cascade
);<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<!-- 
    Mapping file autogenerated by MyEclipse Persistence Tools
-->
<hibernate-mapping>
    <class name="com.sms.po.User" table="user" catalog="sms">
        <id name="name" type="java.lang.String">
            <column name="name" length="50" />
            <generator class="native"></generator>
        </id>
        <property name="pwd" type="java.lang.String">
            <column name="pwd" length="50" />
        </property>
        <set name="banks" inverse="true">
            <key>
                <column name="name" length="50" />
            </key>
            <one-to-many class="com.sms.po.Bank" />
        </set>
    </class>
</hibernate-mapping>
求解

解决方案 »

  1.   

    没找到servlet啊,看看struts的配置
      

  2.   

    struts配置:加一句,serverlet不是封装了吗?还要自己写?
    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE struts-config PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 1.2//EN" "http://struts.apache.org/dtds/struts-config_1_2.dtd"><struts-config>
    <data-sources />
    <form-beans>
    <form-bean name="userForm" type="com.sms.struts.form.UserForm" /> </form-beans> <global-exceptions />
    <global-forwards />
    <action-mappings>
    <action attribute="userForm" input="/jsp/failure.jsp"
    name="userForm" parameter="status" path="/user" scope="request"
    type="com.sms.struts.action.UserAction">
    <forward name="success" path="/jsp/success.jsp"></forward>
    <forward name="failure" path="/jsp/failure.jsp"></forward>
    </action> </action-mappings> <controller
    processorClass="org.springframework.web.struts.DelegatingRequestProcessor">
    </controller>
    <message-resources parameter="com.sms.struts.ApplicationResources" />
    <plug-in
    className="org.springframework.web.struts.ContextLoaderPlugIn">
    <set-property property="contextConfigLocation"
    value="/WEB-INF/classes/applicationContext.xml" />
    </plug-in>
    </struts-config>
      

  3.   

    高手来顶啊。user.hbm.xml及bank.hbm.xml要怎么配置外键才不会出错。。...
      

  4.   

    看hibernate文档,里面有例子
      

  5.   

    问题解决了实体User必须定义Set中的属性banks
    package com.sms.po;import java.util.HashSet;
    import java.util.Set;public class User {
    private  String name;
    private  String pwd;
    private Set banks=new HashSet();
    public Set getBanks() {
    return banks;
    }
    public void setBanks(Set banks) {
    this.banks = banks;
    }
    public String getName() {
    return name;
    }
    public void setName(String name) {
    this.name = name;
    }
    public String getPwd() {
    return pwd;
    }
    public void setPwd(String pwd) {
    this.pwd = pwd;
    }}
    Bank中也要定义User属性package com.sms.po;public class Bank {
    private String count;
    private String name;
    private String balance;
    private User user;
    public User getUser() {
    return user;
    }
    public void setUser(User user) {
    this.user = user;
    }
    public String getCount() {
    return count;
    }
    public void setCount(String count) {
    this.count = count;
    }
    public String getName() {
    return name;
    }
    public void setName(String name) {
    this.name = name;
    }
    public String getBalance() {
    return balance;
    }
    public void setBalance(String balance) {
    this.balance = balance;
    }
    }