|
When persistence.xml is configured with hibernate.hbm2ddl.auto=update:
My BadThing entity contains the following mapping:
@OneToOne(optional = true) @JoinColumns( { @JoinColumn(name = "id", referencedColumnName = "thing_id", nullable = true, updatable = true), @JoinColumn(name = "current_thing_data", referencedColumnName = "created", nullable = true, updatable = true) }
) @MapsId("id") private BadThingData currentData;
Despite being optional with two nullable join columns, the following schema DDL is generated:
sql> show columns from bad_thing; FIELD | TYPE | NULL | KEY | DEFAULT ID | BIGINT(19) | NO | PRI | (NEXT VALUE FOR PUBLIC.SYSTEM_SEQUENCE_85A1C07C_67FF_454A_B608_465214803984) LOCK | INTEGER(10) | NO | | NULL NAME | VARCHAR(255) | NO | UNI | NULL CURRENT_THING_DATA | TIMESTAMP(23) | NO | | NULL
Note that CURRENT_THING_DATA is NOT NULL.
Similarly for BadItemNode:
@ManyToOne(fetch = FetchType.LAZY, optional = false) @JoinColumns( { @JoinColumn(name = "tree_id", referencedColumnName = "tree_id", nullable = true, updatable = false), @JoinColumn(name = "parent_id", referencedColumnName = "item_id", nullable = true, updatable = false) }
) @MapsId("id.treeId") private BadItemNode parent;
sql> show columns from bad_item_node; FIELD | TYPE | NULL | KEY | DEFAULT ITEM_ID | BIGINT(19) | NO | PRI | NULL TREE_ID | BIGINT(19) | NO | PRI | NULL PARENT_ID | BIGINT(19) | NO | | NULL
I have worked around these problems, c.f. Item and ItemNode.
|