Hibernate_should be mapped with insert="false" update="false"的解决方法

今天在配置hibernate 单向多对一映射时出现了启动异常,第一句末尾出现了should be mapped with insert="false" update="false"提示

原因是存在账户和角色的多对一关系

在账户对应的实体类中添加了ROLE_ID属性,之后又配置了


导致ROLE_ID重复


解决方法:删除Account类中的ROLE_ID属性和对应get,set方法,在Account.hbm.xml中删除对应的property即可



以下为修改后的部分源码

ACCOUNT 类:

public class Account {

private Integer accountid;


private String accountname;
private String password;
private Integer aisuser;

private Role accrol;


public Integer getAccountid() {
return accountid;
}
public void setAccountid(Integer accountid) {
this.accountid = accountid;
}


public String getAccountname() {
return accountname;
}
public void setAccountname(String accountname) {
this.accountname = accountname;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public Integer getAisuser() {
return aisuser;
}
public void setAisuser(Integer aisuser) {
this.aisuser = aisuser;
}
public Role getAccrol() {
return accrol;
}
public void setAccrol(Role accrol) {
this.accrol = accrol;
}
}


ROLE类:

public class Role {

private Integer rid;
private String rname;
private Integer ruse;

private Set<Function> funcset;

public Integer getRid() {
return rid;
}
public void setRid(Integer rid) {
this.rid = rid;
}
public String getRname() {
return rname;
}
public void setRname(String rname) {
this.rname = rname;
}
public Integer getRuse() {
return ruse;
}
public void setRuse(Integer ruse) {
this.ruse = ruse;
}
public Set<Function> getFuncset() {
return funcset;
}
public void setFuncset(Set<Function> funcset) {
this.funcset = funcset;
}
}


ACCOUNT.HBM.XML:

<hibernate-mapping package="cn.edu.teachInNet.main.common.entity">


<class name="Account" table="account">

<id name="accountid" type="java.lang.Integer">
<column name="ACCOUNT_ID" />
<generator class="identity" />
</id>

<property name="accountname" type="java.lang.String">
<column name="ACCOUNT_NAME" />
</property>
<property name="password" type="java.lang.String">
<column name="PASSWORD" />
</property>
<property name="aisuser" type="java.lang.Integer">
<column name="ACCOUNT_ISUSER" />
</property>
<!-- 映射单向多对一关系,多个账户对应一个角色 -->
<many-to-one name="accrol" class="Role" column="ROLE_ID"></many-to-one>

</class>


</hibernate-mapping>    


ROLE.HBM.XML:

<hibernate-mapping package="cn.edu.teachInNet.main.common.entity">


<class name="Role" table="role">

<id name="rid" type="java.lang.Integer">
<column name="ROLE_ID" />
<generator class="identity" />
</id>

<property name="rname" type="java.lang.String">
<column name="ROLE_NAME" />
</property>

<property name="ruse" type="java.lang.Integer">
<column name="ROLE_ISUSER" />
</property>
<!-- 映射单向多对多关系,角色和权限多对多 -->
<set name="funcset" table="rol_fun" cascade="save-update" >
<key>
<column name="ROLE_ID"></column>
</key>

<many-to-many class="Function" column="FUNCTION_ID"/>

</set>

</class>


</hibernate-mapping>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
智慧校园整体解决方案是响应国家教育信息化政策,结合教育改革和技术创新的产物。该方案以物联网、大数据、人工智能和移动互联技术为基础,旨在打造一个安全、高效、互动且环保的教育环境。方案强调从数字化校园向智慧校园的转变,通过自动数据采集、智能分析和按需服务,实现校园业务的智能化管理。 方案的总体设计原则包括应用至上、分层设计和互联互通,确保系统能够满足不同用户角色的需求,并实现数据和资源的整合与共享。框架设计涵盖了校园安全、管理、教学、环境等多个方面,构建了一个全面的校园应用生态系统。这包括智慧安全系统、校园身份识别、智能排课及选课系统、智慧学习系统、精品录播教室方案等,以支持个性化学习和教学评估。 建设内容突出了智慧安全和智慧管理的重要性。智慧安全管理通过分布式录播系统和紧急预案一键启动功能,增强校园安全预警和事件响应能力。智慧管理系统则利用物联网技术,实现人员和设备的智能管理,提高校园运营效率。 智慧教学部分,方案提供了智慧学习系统和精品录播教室方案,支持专业级学习硬件和智能化网络管理,促进个性化学习和教学资源的高效利用。同时,教学质量评估中心和资源应用平台的建设,旨在提升教学评估的科学性和教育资源的共享性。 智慧环境建设则侧重于基于物联网的设备管理,通过智慧教室管理系统实现教室环境的智能控制和能效管理,打造绿色、节能的校园环境。电子班牌和校园信息发布系统的建设,将作为智慧校园的核心和入口,提供教务、一卡通、图书馆等系统的集成信息。 总体而言,智慧校园整体解决方案通过集成先进技术,不仅提升了校园的信息化水平,而且优化了教学和管理流程,为学生、教师和家长提供了更加便捷、个性化的教育体验。
以下是对代码的优化和建议: 1. 使用类方法代替静态方法 在这种情况下,我们可以使用类方法代替静态方法。这样,我们可以从类本身传递参数而不是从实例传递参数,并且可以轻松地访问类属性。 2. 使用参数注释 为了更好地理解代码,我们建议使用参数注释,以便将参数名称,类型和说明文档化。 3. 使用类型提示 在函数参数和返回值中使用类型提示可以提高代码的可读性和可维护性,并帮助 IDE 提供更好的代码补全和错误检查。 4. 使用 try-finally 块 使用 try-finally 块可以确保无论是否出现异常,都会关闭数据库会话。 5. 使用 with 语句 使用 with 语句可以确保数据库会话在使用后被关闭,而无需显式调用 commit 或 rollback 方法。 以下是优化后的代码: ``` class OperationLog(db.Model): """操作日志表""" __bind_key__ = 'db2' __tablename__ = 'operation_log' id = mapped_column(Integer, primary_key=True) userid = mapped_column(String(16)) username = mapped_column(String(32), index=True) endpoint = mapped_column(String(128)) methods = mapped_column(String(16)) full_path = mapped_column(String(256)) c_date = mapped_column(DateTime) @classmethod def add_operation_log(cls, userid: str, username: str) -> bool: """新增操作日志""" c_date = datetime.now() operation_log = cls() operation_log.userid = userid operation_log.username = username operation_log.endpoint = request.endpoint operation_log.methods = request.method operation_log.full_path = request.full_path operation_log.c_date = c_date with db.session.begin(): db.session.add(operation_log) db.session.execute( update(User).where(User.userid == userid).values(lastlogin=c_date)) return True ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值