业务场景:
    订单拆分。
    sql示例如下:
    DROP TABLE IF EXITS `customer_order`;
    CREATE TABLE IF NOT EXISTS `customer_order`
    (
        `id`   VARCHAR(32),
        `split_no` INT,
        `is_split` tinyint
    );
   ALTER TABLE `customer_order` ADD CONSTRIANT PK_CUSTOMER_ORDER PRIMARY KEY 
 (`id`,`split_no`);持久化框架:   Hibernate
期望场景:
   id 是自动生成的,但是split_no是可配置的。Hibernate 映射文件示例:
<composite-id name="id" class="com.bingsoft.data.vo.CustomerOrderId" >
            <key-property name="customerOrderId" type="string" >
                <column name="customer_order_id" length="32" />
            </key-property>
            <key-property name="splitNo" type="int">
                <column name="split_no" />
            </key-property>
     <!-- Can I configure Generator Strategy?   -->       </composite-id>
现收集的意见如下:
(https://forum.hibernate.org/viewtopic.php?p=2347681)
Simply because composite-id are meant to be business keys, not technical one. So they can't be automatically generated. 
We regard this as an extremely strange thing to want to do. If you have a generated surrogate key, why not just make it be the primary key?自己的意见是: 逻辑数据库的设计问题以上。求指导。求意见。数据库HibernateSQL

解决方案 »

  1.   

    从数据库角度来看如果是innodb表最好是自增主键
      

  2.   

    先感谢下。
    那我要把表拆分下吗?
    仍以上述业务场景为例:
    订单拆分之后的实体对应的数据表设置一个代理主键,然后使用外键关联订单表的主键。又把问题给兜回去了,就此业务场景而言,拆分表应该是不可行的吧。
    另请教下:mysql的基本索引方式也是 B+Tree?
      

  3.   

    mysql的基本索引方式也是 B+Tree
      

  4.   

    使用了拦截器的方式"解决"了这个问题。很遗憾没能得到WWWWA、wwwwb的指导。
    非常感谢 rucypli、ACMAIN_CHM的指导与帮助。