| In the JoinColumn annotation of the one-to-many relation I confused attributes "name" and "referencedColumnName". A null pointer exception message was printed in the log without details. To find out what's the problem I had to debug the code and found out that method checkReferencedColumnsType of Ejb3JoinColumn class throws MappingException with message "Unable to find column with logical name: ...". Unfortunately this message is not printed in the log. See attached file hibernate.log. Owning class:
@Entity(name = "event")
@Table(name = "e_event")
public class Event extends CoreDomainObject {
@Id
@GenericGenerator(name="uuid-gen", strategy = "uuid2")
@GeneratedValue(generator="uuid-gen")
@Type(type = "pg-uuid")
@Column(name = "id", columnDefinition = "UUID")
private UUID id;
@Column(name = "timestamp")
private LocalDateTime timestamp;
@Enumerated(EnumType.STRING)
@Column(name = "event_code")
private EventCode eventCode;
@OneToMany(cascade = ALL)
@JoinColumn(name = "id", referencedColumnName = "event_id")
private List<EventData> data = new ArrayList<>(0);
}
Owned class:
@Entity(name = "eventData")
@Table(name = "e_event_data")
public class EventData extends CoreDomainObject {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Column(name = "key")
private String key;
@Column(name = "value")
private String value;
}
Notice confused attributes "name" and "referencedColumnName" of the JoinColumns annotation in the Event class. It should be:
@JoinColumn(name = "event_id", referencedColumnName = "id")
I'm using Logback 1.1.3:
<?xml version="1.0" encoding="UTF-8"?>
<configuration scan="true" scanPeriod="60 seconds">
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>%clr(%d{yyyy-MM-dd HH:mm:ss.SSS}){green} [%thread] %clr(%-5level){magenta} %clr(%logger{36}){cyan} - %msg %n %wex</pattern>
</encoder>
</appender>
<logger name="org.hibernate" level="TRACE"/>
<logger name="org.spring" level="TRACE"/>
<root>
<level value="INFO"/>
<appender-ref ref="STDOUT"/>
</root>
</configuration>
My is based on Spring Boot 1.3.1.RELEASE. |