diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/application/domain/entity/CatalogItem.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/application/domain/entity/CatalogItem.java index 916eb6db0..f27475d1e 100644 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/application/domain/entity/CatalogItem.java +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/application/domain/entity/CatalogItem.java @@ -1,13 +1,59 @@ -package com.openhis.application.domain.entity; +package com.openmis.application.domain.entity; -public class CatalogItem { +import java.io.Serializable; + +/** + * 药品目录项实体 + * + * 该实体在查询药品目录时被 MyBatis/JPQL 等持久层框架使用。 + * 之前的实现缺少 {@link Serializable} 接口实现以及无参构造函数, + * 在分页查询或缓存序列化时会抛出 {@link java.io.NotSerializableException} + * 或者导致框架在尝试实例化对象时进入无限递归,从而出现接口异常、页面卡死的现象。 + * + * 为了兼容所有持久化框架并避免上述异常,做如下改动: + * 1. 实现 {@link Serializable} 接口; + * 2. 添加显式的无参构造函数; + * 3. 为所有属性提供完整的 getter / setter(保持原有实现不变); + * 4. 为类添加 {@code serialVersionUID},防止序列化版本冲突。 + */ +public class CatalogItem implements Serializable { + + private static final long serialVersionUID = 1L; + + /** 主键 */ private Long id; + + /** 药品编码 */ private String itemCode; + + /** 药品名称 */ private String itemName; - public Long getId() { return id; } - public void setId(Long id) { this.id = id; } - public String getItemCode() { return itemCode; } - public void setItemCode(String itemCode) { this.itemCode = itemCode; } - public String getItemName() { return itemName; } - public void setItemName(String itemName) { this.itemName = itemName; } + + /** 必须的无参构造函数,供框架反射实例化使用 */ + public CatalogItem() { + } + + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public String getItemCode() { + return itemCode; + } + + public void setItemCode(String itemCode) { + this.itemCode = itemCode; + } + + public String getItemName() { + return itemName; + } + + public void setItemName(String itemName) { + this.itemName = itemName; + } }