У меня есть класс сущностей, который используется для моделирования метеостанции, и он включает уникальное строковое свойство «код».У меня также есть класс сущностей, который используется для того, чтобы содержать среднесуточные значения для различных наблюдений, и этот среднесуточный класс сущностей имеет многозначную связь с классом сущностей станции, т.е. каждый среднесуточный объект связан со станцией:
@Entity(name = EsrlDailyAvg.TABLE_NAME)
@Table(name = EsrlDailyAvg.TABLE_NAME,
uniqueConstraints = { @UniqueConstraint(columnNames = { EsrlDailyAvg.STATION_COLUMN_NAME,
EsrlDailyAvg.DATE_COLUMN_NAME }) })
public final class EsrlDailyAvg
extends AbstractPersistentEntity<Long>
{
public static final String TABLE_NAME = "ESRL_DAILY_AVG";
public static final String STATION_COLUMN_NAME = "ESRL_STATION_ID";
public static final String DATE_COLUMN_NAME = "ESRL_DATE";
private EsrlStation station;
private Date date;
// additional properties used to contain average values
@Column(name = DATE_COLUMN_NAME, nullable = false)
public Date getDate()
{
return date;
}
@ManyToOne(fetch = FetchType.LAZY, cascade = CascadeType.PERSIST)
@JoinColumn(name = STATION_COLUMN_NAME)
public EsrlStation getStation()
{
return station;
}
....
}
@Entity(name = EsrlStation.TABLE_NAME)
public class EsrlStation
extends AbstractPersistentEntity<Long>
{
public static final String TABLE_NAME = "ESRL_STATION";
private EsrlStationCodeEnum code;
@Column(name = "CODE", nullable = false, unique = true)
@Enumerated(EnumType.STRING)
public EsrlStationCodeEnum getCode()
{
return code;
}
...
}
Класс DAO для среднесуточных объектов содержит метод поиска уникальной среднесуточной сущности по коду станции и дате:
public EsrlDailyAvg findByStationCodeDate(final String stationCode,
final Date date)
{
String hql = "from " + getCanonicalPersistentClassName() + " dailyAvg where dailyAvg.station.code = '" +
stationCode + "' and dailyAvg.date = :date";
return (EsrlDailyAvg) getCurrentSession().createQuery(hql).setParameter("date", date).uniqueResult();
}
Я написал тесты, которые сохраняют, а затем успешно находят ежедневноСредние объекты по коду станции и дате, поэтому я предполагаю, что приведенный выше код DAO работает, как ожидалось.Однако, когда я запускаю отдельную программу, которая использует этот метод DAO, я не могу успешно найти объект среднесуточной сущности, который, как мне известно, присутствует (я могу запросить базу данных с помощью SQL и посмотреть запись).
IЯ не уверен, что это уместно, но я запускаю свои тесты, используя базу данных HSQL в памяти, и я запускаю отдельную программу, используя базу данных Oracle.
Я отладил код и код станциии параметры даты передаются, как и ожидалось, в метод DAO.
Может кто-нибудь прокомментировать, почему это происходит, или предложить, где я должен искать ошибку?Заранее спасибо за помощь.