Skip to content

Commit 87f9fca

Browse files
Flugtigerlukasj
authored andcommitted
[2.7] Bug 546312 - Add missing mapping for java.time classes to DatabasePlatform (#416)
Signed-off-by: Alexander Lehmann <[email protected]>
1 parent e1a8c14 commit 87f9fca

File tree

5 files changed

+280
-46
lines changed

5 files changed

+280
-46
lines changed

foundation/org.eclipse.persistence.core/src/org/eclipse/persistence/internal/databaseaccess/DatabasePlatform.java

+11-4
Original file line numberDiff line numberDiff line change
@@ -1344,14 +1344,21 @@ public int getJDBCType(Class javaType) {
13441344
return Types.TIMESTAMP;
13451345
} else if (javaType == ClassConstants.UTILDATE ) {
13461346
return Types.TIMESTAMP;
1347-
} else if (javaType == ClassConstants.TIME) {
1347+
} else if (javaType == ClassConstants.TIME ||
1348+
javaType == ClassConstants.TIME_LTIME) { //bug 546312
13481349
return Types.TIME;
1349-
} else if (javaType == ClassConstants.SQLDATE) {
1350+
} else if (javaType == ClassConstants.SQLDATE ||
1351+
javaType == ClassConstants.TIME_LDATE) { //bug 546312
13501352
return Types.DATE;
13511353
} else if (javaType == ClassConstants.TIMESTAMP ||
1352-
javaType == ClassConstants.UTILDATE) { //bug 5237080, return TIMESTAMP for java.util.Date as well
1354+
javaType == ClassConstants.UTILDATE || //bug 5237080, return TIMESTAMP for java.util.Date as well
1355+
javaType == ClassConstants.TIME_LDATETIME) { //bug 546312
13531356
return Types.TIMESTAMP;
1354-
} else if (javaType == ClassConstants.ABYTE) {
1357+
} else if(javaType == ClassConstants.TIME_OTIME) { //bug 546312
1358+
return Types.TIME_WITH_TIMEZONE;
1359+
} else if(javaType == ClassConstants.TIME_ODATETIME) { //bug 546312
1360+
return Types.TIMESTAMP_WITH_TIMEZONE;
1361+
}else if (javaType == ClassConstants.ABYTE) {
13551362
return Types.LONGVARBINARY;
13561363
} else if (javaType == ClassConstants.APBYTE) {
13571364
return Types.LONGVARBINARY;

jpa/eclipselink.jpa.test/src/org/eclipse/persistence/testing/models/jpa/datetime/DateTime.java

+79-26
Original file line numberDiff line numberDiff line change
@@ -22,29 +22,39 @@
2222
import java.io.Serializable;
2323
import java.sql.Time;
2424
import java.sql.Timestamp;
25+
import java.time.LocalDate;
26+
import java.time.LocalDateTime;
27+
import java.time.LocalTime;
28+
import java.time.OffsetDateTime;
29+
import java.time.OffsetTime;
30+
import java.time.ZoneOffset;
2531
import java.util.Calendar;
2632
import java.util.Date;
2733
import java.util.HashMap;
2834
import java.util.Map;
2935

3036
import javax.persistence.CascadeType;
3137
import javax.persistence.Column;
32-
import javax.persistence.ElementCollection;
3338
import javax.persistence.Entity;
3439
import javax.persistence.GeneratedValue;
3540
import javax.persistence.Id;
36-
import javax.persistence.MapKeyColumn;
3741
import javax.persistence.OneToMany;
3842
import javax.persistence.Table;
3943
import javax.persistence.TableGenerator;
4044
import javax.persistence.Temporal;
4145
import javax.persistence.TemporalType;
4246

4347
@Entity
44-
@Table(name="CMP3_DATE_TIME")
48+
@Table(name = "CMP3_DATE_TIME")
4549
public class DateTime implements Serializable {
50+
4651
private Integer id;
4752
private java.sql.Date date;
53+
private LocalDate localDate;
54+
private LocalTime localTime;
55+
private LocalDateTime localDateTime;
56+
private OffsetTime offsetTime;
57+
private OffsetDateTime offsetDateTime;
4858
private Time time;
4959
private Timestamp timestamp;
5060
private Date utilDate;
@@ -53,28 +63,28 @@ public class DateTime implements Serializable {
5363
private Map<Date, DateTime> uniSelfMap;
5464

5565
public DateTime() {
56-
}
57-
58-
public DateTime(java.sql.Date date, Time time, Timestamp timestamp, Date utilDate, Calendar calendar) {
59-
this.date = date;
60-
this.time = time;
61-
this.timestamp = timestamp;
62-
this.utilDate = utilDate;
63-
this.calendar = calendar;
66+
LocalTime localTime = LocalTime.of(0, 0);
67+
LocalDateTime localDateTime = LocalDateTime.ofEpochSecond(0, 0, ZoneOffset.UTC);
68+
69+
this.date = new java.sql.Date(0);
70+
this.localDate = LocalDate.ofEpochDay(0);
71+
this.localTime = localTime;
72+
this.localDateTime = localDateTime;
73+
this.offsetTime = OffsetTime.of(localTime, ZoneOffset.UTC);
74+
this.offsetDateTime = OffsetDateTime.of(localDateTime, ZoneOffset.UTC);
75+
this.time = new Time(0);
76+
this.timestamp = new Timestamp(0);
77+
this.utilDate = new Date(0);
78+
this.calendar = Calendar.getInstance();
6479

6580
uniSelfMap = new HashMap<Date, DateTime>();
6681
uniSelfMap.put(new Date(), this);
6782
}
6883

6984
@Id
70-
@GeneratedValue(strategy=TABLE, generator="DATETIME_TABLE_GENERATOR")
71-
@TableGenerator(
72-
name="DATETIME_TABLE_GENERATOR",
73-
table="CMP3_DATETIME_SEQ",
74-
pkColumnName="SEQ_NAME",
75-
valueColumnName="SEQ_COUNT"
76-
)
77-
@Column(name="DT_ID")
85+
@GeneratedValue(strategy = TABLE, generator = "DATETIME_TABLE_GENERATOR")
86+
@TableGenerator(name = "DATETIME_TABLE_GENERATOR", table = "CMP3_DATETIME_SEQ", pkColumnName = "SEQ_NAME", valueColumnName = "SEQ_COUNT")
87+
@Column(name = "DT_ID")
7888
public Integer getId() {
7989
return id;
8090
}
@@ -83,7 +93,7 @@ public void setId(Integer id) {
8393
this.id = id;
8494
}
8595

86-
@Column(name="SQL_DATE")
96+
@Column(name = "SQL_DATE")
8797
public java.sql.Date getDate() {
8898
return date;
8999
}
@@ -92,7 +102,52 @@ public void setDate(java.sql.Date date) {
92102
this.date = date;
93103
}
94104

95-
@Column(name="SQL_TIME")
105+
@Column(name = "LOCAL_DATE")
106+
public LocalDate getLocalDate() {
107+
return localDate;
108+
}
109+
110+
public void setLocalDate(LocalDate localDate) {
111+
this.localDate = localDate;
112+
}
113+
114+
@Column(name = "LOCAL_TIME")
115+
public LocalTime getLocalTime() {
116+
return localTime;
117+
}
118+
119+
public void setLocalTime(LocalTime localTime) {
120+
this.localTime = localTime;
121+
}
122+
123+
@Column(name = "OFFSET_DATE_TIME")
124+
public OffsetDateTime getOffsetDateTime() {
125+
return offsetDateTime;
126+
}
127+
128+
public void setOffsetDateTime(OffsetDateTime offsetDateTime) {
129+
this.offsetDateTime = offsetDateTime;
130+
}
131+
132+
@Column(name = "OFFSET_TIME")
133+
public OffsetTime getOffsetTime() {
134+
return offsetTime;
135+
}
136+
137+
public void setOffsetTime(OffsetTime offsetTime) {
138+
this.offsetTime = offsetTime;
139+
}
140+
141+
@Column(name = "LOCAL_DATE_TIME")
142+
public LocalDateTime getLocalDateTime() {
143+
return localDateTime;
144+
}
145+
146+
public void setLocalDateTime(LocalDateTime localDateTime) {
147+
this.localDateTime = localDateTime;
148+
}
149+
150+
@Column(name = "SQL_TIME")
96151
public Time getTime() {
97152
return time;
98153
}
@@ -101,7 +156,7 @@ public void setTime(Time date) {
101156
this.time = date;
102157
}
103158

104-
@Column(name="SQL_TS")
159+
@Column(name = "SQL_TS")
105160
public Timestamp getTimestamp() {
106161
return timestamp;
107162
}
@@ -110,7 +165,7 @@ public void setTimestamp(Timestamp date) {
110165
this.timestamp = date;
111166
}
112167

113-
@Column(name="UTIL_DATE")
168+
@Column(name = "UTIL_DATE")
114169
@Temporal(TemporalType.TIMESTAMP)
115170
public Date getUtilDate() {
116171
return utilDate;
@@ -120,7 +175,7 @@ public void setUtilDate(Date date) {
120175
this.utilDate = date;
121176
}
122177

123-
@Column(name="CAL")
178+
@Column(name = "CAL")
124179
// No @Temporal to test defaulting
125180
public Calendar getCalendar() {
126181
return calendar;
@@ -139,6 +194,4 @@ public Map<Date, DateTime> getUniSelfMap() {
139194
public void setUniSelfMap(Map<Date, DateTime> u) {
140195
uniSelfMap = u;
141196
}
142-
143-
144197
}

jpa/eclipselink.jpa.test/src/org/eclipse/persistence/testing/models/jpa/datetime/DateTimePopulator.java

+9-3
Original file line numberDiff line numberDiff line change
@@ -16,9 +16,10 @@
1616

1717
import java.lang.reflect.Method;
1818
import java.sql.Time;
19-
2019
import java.sql.Timestamp;
21-
20+
import java.time.OffsetTime;
21+
import java.time.ZoneId;
22+
import java.time.ZoneOffset;
2223
import java.util.Calendar;
2324
import java.util.Date;
2425
import java.util.GregorianCalendar;
@@ -113,13 +114,18 @@ public DateTime example4() {
113114
@SuppressWarnings("deprecation")
114115
public DateTime buildAttributes(Calendar cal) {
115116
DateTime dateTime = new DateTime();
116-
long time = cal.getTime().getTime();;
117+
long time = cal.getTime().getTime();
117118

118119
dateTime.setDate(new java.sql.Date(time));
119120
dateTime.setTime(new Time(cal.get(Calendar.HOUR_OF_DAY), cal.get(Calendar.MINUTE), cal.get(Calendar.SECOND)));
120121
dateTime.setTimestamp(new Timestamp(time));
121122
dateTime.setUtilDate(new Date(time));
122123
dateTime.setCalendar(cal);
124+
dateTime.setLocalDate(cal.getTime().toInstant().atZone(ZoneId.systemDefault()).toLocalDate());
125+
dateTime.setLocalTime(cal.getTime().toInstant().atZone(ZoneId.systemDefault()).toLocalTime());
126+
dateTime.setLocalDateTime(dateTime.getLocalDate().atTime(dateTime.getLocalTime()));
127+
dateTime.setOffsetTime(OffsetTime.of(dateTime.getLocalTime(), ZoneOffset.UTC));
128+
dateTime.setOffsetDateTime(dateTime.getOffsetTime().atDate(dateTime.getLocalDate()));
123129

124130
return dateTime;
125131
}

jpa/eclipselink.jpa.test/src/org/eclipse/persistence/testing/models/jpa/datetime/DateTimeTableCreator.java

+50
Original file line numberDiff line numberDiff line change
@@ -83,6 +83,56 @@ public static TableDefinition buildDateTimeTable() {
8383
fieldPOSTALCODE.setShouldAllowNull(true);
8484
table.addField(fieldPOSTALCODE);
8585

86+
FieldDefinition fieldLocalDate = new FieldDefinition();
87+
fieldLocalDate.setName("LOCAL_DATE");
88+
fieldLocalDate.setTypeName("DATE");
89+
fieldLocalDate.setSize(6);
90+
fieldLocalDate.setIsPrimaryKey(false);
91+
fieldLocalDate.setIsIdentity(false);
92+
fieldLocalDate.setUnique(false);
93+
fieldLocalDate.setShouldAllowNull(true);
94+
table.addField(fieldLocalDate);
95+
96+
FieldDefinition fieldLocalTime = new FieldDefinition();
97+
fieldLocalTime.setName("LOCAL_TIME");
98+
fieldLocalTime.setTypeName("TIME");
99+
fieldLocalTime.setSize(6);
100+
fieldLocalTime.setIsPrimaryKey(false);
101+
fieldLocalTime.setIsIdentity(false);
102+
fieldLocalTime.setUnique(false);
103+
fieldLocalTime.setShouldAllowNull(true);
104+
table.addField(fieldLocalTime);
105+
106+
FieldDefinition fieldLocalDateTime = new FieldDefinition();
107+
fieldLocalDateTime.setName("LOCAL_DATE_TIME");
108+
fieldLocalDateTime.setTypeName("TIMESTAMP");
109+
fieldLocalDateTime.setSize(6);
110+
fieldLocalDateTime.setIsPrimaryKey(false);
111+
fieldLocalDateTime.setIsIdentity(false);
112+
fieldLocalDateTime.setUnique(false);
113+
fieldLocalDateTime.setShouldAllowNull(true);
114+
table.addField(fieldLocalDateTime);
115+
116+
FieldDefinition fieldOffsetTime = new FieldDefinition();
117+
fieldOffsetTime.setName("OFFSET_TIME");
118+
fieldOffsetTime.setTypeName("TIME");
119+
fieldOffsetTime.setSize(6);
120+
fieldOffsetTime.setIsPrimaryKey(false);
121+
fieldOffsetTime.setIsIdentity(false);
122+
fieldOffsetTime.setUnique(false);
123+
fieldOffsetTime.setShouldAllowNull(true);
124+
table.addField(fieldOffsetTime);
125+
126+
FieldDefinition fieldOffsetDateTime = new FieldDefinition();
127+
fieldOffsetDateTime.setName("OFFSET_DATE_TIME");
128+
fieldOffsetDateTime.setTypeName("TIMESTAMP");
129+
fieldOffsetDateTime.setSize(6);
130+
fieldOffsetDateTime.setIsPrimaryKey(false);
131+
fieldOffsetDateTime.setIsIdentity(false);
132+
fieldOffsetDateTime.setUnique(false);
133+
fieldOffsetDateTime.setShouldAllowNull(true);
134+
table.addField(fieldOffsetDateTime);
135+
86136
FieldDefinition fieldCalToCal = new FieldDefinition();
87137
fieldCalToCal.setName("CAL");
88138
fieldCalToCal.setTypeName("TIMESTAMP");

0 commit comments

Comments
 (0)