Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

In all these tests I am using some strategies to make sure that tables and fields name generated by Hibernate will be the same as Eclipse-LinkIn all these tests I am using some strategies to make sure that tables and fields name generated by Hibernate will be the same as Eclipse-Link.

Definitions

  • ElementCollection: Specifies a collection of instances of a basic type or embeddable class. Must be specified if the collection is to be mapped by means of a collection table.
  • OneToMany: Specifies a many-valued association with one-to-many multiplicity. If the collection is defined using generics to specify the element type, the associated target entity type need not be specified; otherwise the target entity class must be specified. If the relationship is bidirectional, the mappedBy element must be used to specify the relationship field or property of the entity that is the owner of the relationship. The OneToMany annotation may be used within an embeddable class contained within an entity class to specify a relationship to a collection of entities. If the relationship is bidirectional, the mappedBy element must be used to specify the relationship field or property of the entity that is the owner of the relationship. When the collection is a java.util.Map, the cascade element and the orphanRemoval element apply to the map value.

Persistence classes scanning

...

Control Loop runtime uses persistence.xml file: is the deployment descriptor file for persistence using JPA. It specifies the persistence units and declares the managed persistence classes, the object/relation mapping, and the database connection details.

Hibernate

SpringBoot auto-configuration can automatically scan entity classes. In Control Loop Runtime we can use @EntityScan annotation because entity classes are not placed in the main application package or its sub-packages. In this situation, we need declare the package or list of packages in the main configuration class within @EntityScan annotation.

...

Eclise
Code Block
titleJpaExample
collapsetrue
@Embeddable
@Data
public class ExampleKey implements Serializable {

    private static final long serialVersionUID = 1L;

    @Column(name = "name", length = 120)
    private String name;

    @Column(name = "version", length = 20)
    private String version;
}

@Entity
@Table(name = "Example")
@Data
@EqualsAndHashCode
public class JpaExample implements Serializable {

    private static final long serialVersionUID = 1L;

    @EmbeddedId
    @VerifyKey
    @NotNull
    private ExampleKey key;

    @Column
    private Boolean primed;

    @Column(name = "timeStamp", precision = 3)
    @Temporal(TemporalType.TIMESTAMP)
    @NotNull
    private Date timeStamp;
}
Expand
title

Eclipse-Link

...

MariaDB [controlloop]> describe Example;
+-----------+--------------+------+-----+---------+-------+
| Field     | Type         | Null | Key | Default | Extra |
+-----------+--------------+------+-----+---------+-------+
| PRIMED    | tinyint(1)   | YES  |     | 0       |       |
| timeStamp | datetime(3)  | YES  |     | NULL    |       |
| name      | varchar(120) | NO   | PRI | NULL    |       |
| version   | varchar(20)  | NO   | PRI | NULL    |       |
+-----------+--------------+------+-----+---------+-------+

...

Hibernate

...

MariaDB [controlloop]> describe Example;
+-----------+--------------+------+-----+---------+-------+
| Field     | Type         | Null | Key | Default | Extra |
+-----------+--------------+------+-----+---------+-------+
| name      | varchar(120) | NO   | PRI | NULL    |       |
| version   | varchar(20)  | NO   | PRI | NULL    |       |
| primed    | bit(1)       | YES  |     | NULL    |       |
| timeStamp | datetime(6)  | YES  |     | NULL    |       |
+-----------+--------------+------+-----+---------+-------+

Map of Strings


Code Block
languagejava
titleJpaExampleMap
collapsetrue
@Entity
@Table(name = "ExampleMap")
@Data
@EqualsAndHashCode
public class JpaExampleMap implements Serializable {

    private static final long serialVersionUID = 1L;

    @EmbeddedId
    @VerifyKey
    @NotNull
    private ExampleKey key;

    @ElementCollection
    @Lob
    private Map<@NotNull String, @NotNull String> attributes;
}


Eclipse-Link

MariaDB [controlloop]> describe ExampleMap;
+---------+--------------+------+-----+---------+-------+
| Field   | Type         | Null | Key | Default | Extra |
+---------+--------------+------+-----+---------+-------+
| name    | varchar(120) | NO   | PRI | NULL    |       |
| version | varchar(20)  | NO   | PRI | NULL    |       |
+---------+--------------+------+-----+---------+-------+
MariaDB [controlloop]> SHOW CREATE TABLE JpaExampleMap_ATTRIBUTES;
+--------------------------+----------------------------------------------------------------------------------------------------------+
| Table                    | Create Table                                                                                             |
+--------------------------+----------------------------------------------------------------------------------------------------------+
| JpaExampleMap_ATTRIBUTES | CREATE TABLE `JpaExampleMap_ATTRIBUTES` (
`name` varchar(120) DEFAULT NULL,
  `version` varchar(20) DEFAULT NULL,
`ATTRIBUTES` longtext DEFAULT NULL,
  `ATTRIBUTES_KEY` varchar(255) DEFAULT NULL,
 KEY `FK_JpaExampleMap_ATTRIBUTES_name` (`name`,`version`),
  CONSTRAINT `FK_JpaExampleMap_ATTRIBUTES_name` FOREIGN KEY (`name`, `version`)
REFERENCES `ExampleMap` (`name`, `version`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 |
+--------------------------+----------------------------------------------------------------------------------------------------------+

Hibernate

MariaDB [controlloop]> describe ExampleMap;
+---------+--------------+------+-----+---------+-------+
| Field   | Type         | Null | Key | Default | Extra |
+---------+--------------+------+-----+---------+-------+
| name    | varchar(120) | NO   | PRI | NULL    |       |
| version | varchar(20)  | NO   | PRI | NULL    |       |
+---------+--------------+------+-----+---------+-------+

...

JpaToscaCapabilityAssignment_ATTRIBUTES table

Eclipse-Link

MariaDB [controlloop]> SHOW CREATE TABLE JpaToscaCapabilityAssignment_ATTRIBUTES;
+-----------------------------------------+-------------------------------------------------------------------------------------------+
| Table                       | Create Table                                                                              |
+-----------------------------------------+-------------------------------------------------------------------------------------------+
| JpaToscaCapabilityAssignment_ATTRIBUTES | CREATE TABLE `JpaToscaCapabilityAssignment_ATTRIBUTES` (
                                           `name` varchar(120) DEFAULT NULL,
 `version` varchar(20) DEFAULT NULL,
  `ATTRIBUTES` longtext DEFAULT NULL,
`ATTRIBUTES_KEY` varchar(255) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 |
+-----------------------------------------+-------------------------------------------------------------------------------------------+

Currently in controlloop database, I have not found out why foreign key has not be generated in this table and in all '_ATTRIBUTES', '_META' and '_CONSTRAINTS' tables as well.

Hibernate

MariaDB [controlloop]> SHOW CREATE TABLE JpaToscaCapabilityAssignment_ATTRIBUTES;
+-----------------------------------------+-------------------------------------------------------------------------------------------+
| Table                                   | Create Table                                                                              |
+-----------------------------------------+-------------------------------------------------------------------------------------------+
| JpaToscaCapabilityAssignment_ATTRIBUTES | CREATE TABLE `JpaToscaCapabilityAssignment_ATTRIBUTES` (
  `name` varchar(120) NOT NULL,
`version` varchar(20) NOT NULL,
`attributes` longtext DEFAULT NULL,
`attributes_KEY` varchar(255) NOT NULL,
PRIMARY KEY (`name`,`version`,`attributes_KEY`),
CONSTRAINT `FKjuqj4nashp9jx76h5eh5psp7l` FOREIGN KEY (`name`, `version`)
REFERENCES `ToscaCapabilityAssignment` (`name`, `version`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 |
+-----------------------------------------+-------------------------------------------------------------------------------------------+

...

Code Block
languageyml
titleExample
collapsetrue
ExampleObjMap:
  name: ExampleObjMap
  version: 1.0.0
  examples:
    MyKey1:
      name: example1
      version: 1.0.0
     MyKey2:
      name: example2
      version: 1.0.0

Eclipse-Link

MariaDB [controlloop]> describe ExampleObjMap;
+----------+--------------+------+-----+---------+-------+
| Field    | Type         | Null | Key | Default | Extra |
+----------+--------------+------+-----+---------+-------+
| EXAMPLES | longblob     | YES  |     | NULL    |       |
| name     | varchar(120) | NO   | PRI | NULL    |       |
| version  | varchar(20)  | NO   | PRI | NULL    |       |
+----------+--------------+------+-----+---------+-------+

...

Code Block
languagejava
titleJpaExampleObjMap
collapsetrue
@Entity
@Table(name = "ExampleObjMap")
@Data
@EqualsAndHashCode
public class JpaExampleObjMap implements Serializable {

    private static final long serialVersionUID = 1L;

    @EmbeddedId
    @VerifyKey
    @NotNull
    private ExampleKey key;

    @OneToMany(cascade = CascadeType.ALL, fetch = FetchType.EAGER)
    @JoinTable(
            joinColumns = {@JoinColumn(name = "parent_name", referencedColumnName = "name"),
                    @JoinColumn(name = "parent_version", referencedColumnName = "version")},
            inverseJoinColumns = {@JoinColumn(name = "child_name", referencedColumnName = "name"),
                    @JoinColumn(name = "child_version", referencedColumnName = "version")})
    private Map<@NotNull String, @NotNull JpaExample> examples;
}

Eclipse-Link

MariaDB [controlloop]> SHOW CREATE TABLE ExampleObjMap_Example;
+-----------------------+-------------------------------------------------------------------------------------------------------------+
| Table                 | Create Table                                                                                                |
+-----------------------+-------------------------------------------------------------------------------------------------------------+
| ExampleObjMap_Example | CREATE TABLE `ExampleObjMap_Example` (
`parent_name` varchar(120) NOT NULL,
  `parent_version` varchar(20) NOT NULL,
  `child_name` varchar(120) NOT NULL,
  `child_version` varchar(20) NOT NULL,
  `EXAMPLES_KEY` varchar(255) DEFAULT NULL,
  PRIMARY KEY (`parent_name`,`parent_version`,`child_name`,`child_version`),
  KEY `FK_ExampleObjMap_Example_child_name` (`child_name`,`child_version`),
  CONSTRAINT `FK_ExampleObjMap_Example_child_name` FOREIGN KEY (`child_name`, `child_version`)
REFERENCES `Example` (`name`, `version`),
  CONSTRAINT `FK_ExampleObjMap_Example_parent_name` FOREIGN KEY (`parent_name`, `parent_version`)
REFERENCES `ExampleObjMap` (`name`, `version`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 |
+-----------------------+-------------------------------------------------------------------------------------------------------------+

...

MariaDB [controlloop]> select * from ExampleObjMap_Example;
+---------------+----------------+------------+---------------+--------------+
| parent_name   | parent_version | child_name | child_version | EXAMPLES_KEY |
+---------------+----------------+------------+---------------+--------------+
| ExampleObjMap | 1.0.0          | example1   | 1.0.0         | MyKey1       |
| ExampleObjMap | 1.0.0          | example2   | 1.0.0         | MyKey2       |
+---------------+----------------+------------+---------------+--------------+

Hibernate

MariaDB [controlloop]> SHOW CREATE TABLE ExampleObjMap_Example;

...

Code Block
languagejava
titleJpaExampleObjMap
collapsetrue
@Entity
@Table(name = "ExampleObjMapEc")
@Data
@EqualsAndHashCode
public class JpaExampleObjMapEc implements Serializable {

    private static final long serialVersionUID = 1L;

    @EmbeddedId
    @VerifyKey
    @NotNull
    private ExampleKey key;

    @ElementCollection
    @Lob
    private Map<@NotNull String, @NotNull JpaExample> examples;
}

Eclipse-Link

MariaDB [controlloop]> describe ExampleObjMapEc;
+---------+--------------+------+-----+---------+-------+
| Field   | Type         | Null | Key | Default | Extra |
+---------+--------------+------+-----+---------+-------+
| name    | varchar(120) | NO   | PRI | NULL    |       |
| version | varchar(20)  | NO   | PRI | NULL    |       |
+---------+--------------+------+-----+---------+-------+

...

MariaDB [controlloop]> select * from ExampleObjMapEc;
+---------------+---------+
| name          | version |
+---------------+---------+
| ExampleObjMap | 1.0.0   |
+---------------+---------+

MariaDB [controlloop]> select * from JpaExampleObjMapEc_EXAMPLES;
+---------------+---------+---------------------------+--------------+
| name          | version | EXAMPLES                | EXAMPLES_KEY |
+---------------+---------+---------------------------+--------------+
| ExampleObjMap | 1.0.0   |  .... <binary code> ....  |  MyKey1  |
| ExampleObjMap | 1.0.0   |  .... <binary code> .... |  MyKey2      |
+---------------+---------+---------------------------+--------------+

Hibernate

MariaDB [controlloop]> describe ExampleObjMapEc;
+---------+--------------+------+-----+---------+-------+
| Field   | Type         | Null | Key | Default | Extra |
+---------+--------------+------+-----+---------+-------+
| name    | varchar(120) | NO   | PRI | NULL    |       |
| version | varchar(20)  | NO   | PRI | NULL    |       |
+---------+--------------+------+-----+---------+-------+
MariaDB [controlloop]> SHOW CREATE TABLE JpaExampleObjMapEc_EXAMPLES;
+-----------------------------+-------------------------------------------------------------------------------------------------------+
| Table                       | Create Table                                                                                          |
+-----------------------------+-------------------------------------------------------------------------------------------------------+
| JpaExampleObjMapEc_EXAMPLES | CREATE TABLE `JpaExampleObjMapEc_EXAMPLES` (
  `name` varchar(120) NOT NULL,
  `version` varchar(20) NOT NULL,
  `examples_name` varchar(120) NOT NULL,
`examples_version` varchar(20) NOT NULL,
  `examples_KEY` varchar(255) NOT NULL,
PRIMARY KEY (`name`,`version`,`examples_KEY`),
  UNIQUE KEY `UK_o5b5lwcueiue1x7wf2j9l0ohb` (`examples_name`,`examples_version`),
  CONSTRAINT `FKeu2s8p9mhstus32uliuwib8rr` FOREIGN KEY (`name`, `version`)
REFERENCES `ExampleObjMapEc` (`name`, `version`),
  CONSTRAINT `FKf66pkeal9tdygic4pvspxhph5` FOREIGN KEY (`examples_name`, `examples_version`)
REFERENCES `Example` (`name`, `version`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 |
+-----------------------------+-------------------------------------------------------------------------------------------------------+

...