问题是这样的。
假如我有两张表,一张是user表,里面的主键是userid,另一张是诚信认证表Integrity,里面的主键也是userid。
第一个问题,就是这里是不是该用到两张表的一对一单向关联关系?
一对一的单向关联关系应该是谁指向谁?
我起初的解法是这样的,把诚信表中的主键userid改为一个独立的主键integertyid,然后在数据库中user表中加了一个外键字段integertyid,在程序中是这样实现的,在T_user(user表)类中加入Integerty integerity对象的引用,然后在get方法上注解配置了和诚信表的单向关联映射,然后我就进行了测试,我首先注册一个用户,可是注册时候就报错了
java.sql.BatchUpdateException: Unknown column 'integrity' in 'field list'
注册的时候我用的是this.getHibernateTemplate().save(user);
提示的错误的意思是数据库中没有integrity。这个我也能理解因为user表中根本没有integrity有的只是integrityid,可是我的单向一对一关系的配置都是按照网上的说的做的啊,到底哪里出了错了望大神提醒。
还有就是如果我的思路不对那按照我开始时候表的结构该怎样去实现单向的一对一关联呢?
第二个问题,就是如果不用一对一单行关联关系,那我删除了某一个用户以后他的诚信认证信息还在,怎么解决?
希望大神们能给我解答。再次先谢过了。Hibernatessh

解决方案 »

  1.   

    第一个问题,很明显,应该是user为主,所以应该是诚信认证表Integrity中应该有个user表的外键,所以你应该是搞反了.
    第二个问题,如果不用关联关系,不管怎样,Integrity表中肯定会存个User表的id什么的吧,所以删除User之后,根据那个id什么什么的,删掉Integrity表中的数据就可以了吧.....
      

  2.   

    为什么要设计成一对一呢,如果真的是一对一的话,感觉可以把认证信息放到user表中,一张表岂不更好?
    Unknown column 'integrity' in 'field list'这个错误应该是你的integrity在表中不存在的。到网上查一下,好多例子的,提高解决问题的能力更重要,你觉得呢?
      

  3.   

    是这样的我user表中已经有三十多个字段了,如果吧认证信息也搞到里面就太乱了,
    如果我用单向一对一的该怎么做呢?就按我刚开始的思路,就是integrity中有一个主键同时也是外键的userid,然后怎么配置呢?是在integrity的主键userid的get方法上进行注解的onetonone对吗?然后后边接着配置cascade.ALL这样就可以级联删除了吗?我觉得这样的话就反了吧,
    这样做的话我的理解就是成了integrity表对user表了,这样的话是不是成了删除诚信认证表级联着user表就一块删除了?这样的话跟我的意思就相反了,我的意思是想当删除user表的时候级联的删除该user的认证信息。 呵呵刚学不太理解望能解答。
      

  4.   

    表的结构是这样的。然后我进行一对一的配置。
    我想实现的是用户存在了,诚信表不一定存在,但是诚信表存在了一定有对应的用户存在。
    这样是不是可以用单向一对一的配置实现?
    我是这样配置的。
    在user中声明了一个Integrity的引用integrity
    @OneToOne(cascade = CascadeType.ALL, fetch = FetchType.LAZY)
    @JoinColumn(name="UserId",unique=true)
    public Integrity getIntegrity() {
    return integrity;
    }
    public void setIntegrity(Integrity integrity) {
    this.integrity = integrity;
    }
    然后在Integrity表中的userid的主键生产策略设置为
    @Id
    @Column(name="UserId")
    @GeneratedValue(generator = "idGenerator")  
        @GenericGenerator(name = "idGenerator", strategy = "foreign", 
             parameters = { @Parameter(name = "property", value = "employee") })  
    我就配置了这些,但是问题出现了。当我注册的时候它会报错
    java.sql.BatchUpdateException: Unknown column 'integrity' in 'field list'
    com.mysql.jdbc.PreparedStatement.executeBatchSerially(PreparedStatement.java:1269)就是这个错误?
    该怎么办?在线等