Первый импорт NumberFormat
. Затем добавьте это:
NumberFormat currencyFormatter = NumberFormat.getCurrencyInstance();
Это даст вам два десятичных знака и пометит знак доллара, если он имеет дело с валютой.
import java.text.NumberFormat;
public class Payroll
{
/**
* @param args the command line arguments
*/
public static void main(String[] args)
{
int hoursWorked = 80;
double hourlyPay = 15.52;
double grossPay = hoursWorked * hourlyPay;
NumberFormat currencyFormatter = NumberFormat.getCurrencyInstance();
System.out.println("Your gross pay is " + currencyFormatter.format(grossPay));
}
}
Вы добираетесь 4XOrder и 4XLines, потому что соединение со строками удваивает результаты. Можно установить Преобразователь на ICriteria как:
.SetResultTransformer(new DistinctRootEntityResultTransformer())
Я просто читал Сообщение в блоге Ayende , где он использовал следующий Пример:
session.CreateCriteria(typeof(Post))
.SetFetchMode("Comments", FetchMode.Eager)
.List();
В Запросе Критериев для предотвращения Ленивой Загрузки на одном конкретном Запросе
, Возможно, который может помочь Вам.
@Tigraine: Ваш запрос только возвращает Сообщение с Комментариями. Это приносит Все сообщения со всеми Комментариями (2 уровня). Что Ben, спрашивающий, является Клиентом, чтобы Заказать LineItem (3 уровня). @Ben: к моему знанию nHibernate еще не поддерживает нетерпеливую загрузку до 3 уровней. Будьте в спящем режиме действительно поддерживает его Вы.
У меня была такая же проблема. См. Эту ветку . Я получил не решение, а подсказку от Фабио. Используйте Set вместо сумки. И это сработало.
Итак, я предлагаю попробовать использовать set. Вам не обязательно использовать коллекцию Iesi, используйте IDictonary и NH is happy
public override IEnumerable<Baseline> GetAll()
{
var baselines = Session.CreateQuery(@" from Baseline b
left join fetch b.BaselineMilestones bm
left join fetch bm.BaselineMilestonePrevious ")
.SetResultTransformer(Transformers.DistinctRootEntity)
.List<Baseline>();
return baselines;
}