如何在某种服务器上存储大型java对象

如何在某种服务器上存储大型java对象,java,mysql,json,google-app-engine,serialization,Java,Mysql,Json,Google App Engine,Serialization,我目前有以下问题: 我正在寻找一种在某种服务器上存储大型java对象的合适方法,可以是MySQL数据库或Google应用程序引擎。我已经找到了很多方法来“存储”一个对象,但我正在寻找一些建议,在这种情况下什么是最好的: 案例 我为小企业创建了某种商店管理系统。应用程序的用户可以生成有关例如销售的报告。我想创建保存这些报告的功能,以便以后可以生成这些报告,而无需再次设置所有选项 课程 报告类的布局如下(我排除了getter、setter和list操作符): 公共类报告{ /*属性*/ public

我目前有以下问题:

我正在寻找一种在某种服务器上存储大型java对象的合适方法,可以是MySQL数据库或Google应用程序引擎。我已经找到了很多方法来“存储”一个对象,但我正在寻找一些建议,在这种情况下什么是最好的:

案例

我为小企业创建了某种商店管理系统。应用程序的用户可以生成有关例如销售的报告。我想创建保存这些报告的功能,以便以后可以生成这些报告,而无需再次设置所有选项

课程

报告
类的布局如下(我排除了getter、setter和list操作符):

公共类报告{
/*属性*/
public IntegerProperty ID=新的SimpleIntegerProperty();
public StringProperty name=new SimpleStringProperty();
公共雇员=空;
public BooleanProperty timeFilterPresent=new simpleboleanproperty();
public StringProperty optionalBasicFilterStatement=new SimpleStringProperty();
/*类别*/
公共报告类别;
公共报告子类别子类别;
/*过滤器*/
public List filters=new ArrayList();
/*观点*/
公共列表视图=新建ArrayList();
public List generatedViews=new ArrayList();
/*询问*/
public List querys=new ArrayList();
/*时间间隔*/
公共列表时间间隔=新建ArrayList();
如您所见,这是一个相当大的类。
报告
类中提到的所有其他类也是定制的(例如
过滤器
员工
报告类别
等)

存储对象的选项

我找到了以下保存此对象的选项:

  • 使类
    可序列化
    ,将对象转换为字节数组并存储在MySQL数据库中

    我已经试过了,但是要使所有的子类
    也可序列化也需要做大量的工作,我甚至不确定在这种情况下是否能正常工作

  • 使用
    Gson
    将对象转换为
    JSON
    ,并将其作为纯文本存储在MySQL数据库中

    当我在没有任何调整的情况下尝试此操作时,会出现StackOverflow错误。我可以为此类创建自定义Json转换器,但我也需要为每个子类创建自定义Json转换器。此外,我还必须创建一个从
    Json
    到对象的转换器

  • 通过在Google App Engine上定义必要的类来存储对象

    我将不得不复制Google App Engine上的所有类,这在我更改类或创建某些子类时是不实际的。我可以将对象作为我的应用程序的
    Blob

  • 为这些类创建MySQL表

    我可以为这些类创建单独的表,但是我需要为一次使用创建很多表

  • 所有这些选项都有它们的(dis-)优点,因为我没有存储java对象的经验,我想知道我是否缺少任何选项,以及您更喜欢哪个选项。所有这些选项都需要一些时间来实现,因此我希望确保选择正确的选项


    非常感谢您的帮助!

    为什么不简单地使用一个DB Report表,其中的列包含对其他表中的值的外键引用(链接到它们的主键)?您忘记了可序列化的重要缺点-您无法反序列化到同一类的新版本(大多数情况下),所以你将无法进一步开发你的类别/过滤器/等等。实际上你可以做一些小的改进,等等,也许是一些新的领域,但在某些时候它会成为一个问题likely@Igor:yes forgott that.thx for the hint这就是拥有数据库的原因:它是关系型的。关系将存在,并且数据库已优化以进行管理信息技术
    public class Report {
    
        /* ATTRIBUTES */
    
        public IntegerProperty ID = new SimpleIntegerProperty();
        public StringProperty name = new SimpleStringProperty();
        public Employee employee = null;
        public BooleanProperty timeFilterPresent = new SimpleBooleanProperty();
        public StringProperty optionalBasicFilterStatement = new SimpleStringProperty();
    
        /* Categories */
    
        public ReportCategory category;
        public ReportSubcategory subCategory;
    
        /* Filters */
    
        public List<Filter> filters = new ArrayList<>();
    
        /* Views */
    
        public List<ReportView> views = new ArrayList<>();
        public List<VBox> generatedViews = new ArrayList<>();
    
        /* Queries */
    
        public List<Query> queries = new ArrayList<>();
    
        /* Time intervals */
    
        public List<TimeInterval> timeIntervals = new ArrayList<>();