Это невозможно.
Если вы создаете Money UserType, целью этого типа является объединение двух примитивов в новый единый тип данных.Этот тип данных теперь является одной атомарной единицей.Поскольку UserType считается атомарным типом, оба столбца должны присутствовать для каждого сопоставленного значения Money.Правило применения NHibernate на самом деле семантически верно.У вас есть две денежные ценности.Поэтому у вас должно быть две валюты - они не могут совместно использовать одну, потому что у одного типа денег есть Валюта и Сумма, а сейчас это один элементарный элемент данных, его нельзя разделить или разделить.
Время от времени вы хотите обрабатыватьвалюта как переменная, и, следовательно, нуждается в своем собственном столбце, а в других случаях - в фиксированном, так что несколько типов пользователя могут совместно использовать столбецДаже если бы это было верно, но это не основано на том, как определяются деньги, как бы NHibernate узнал, что вы хотите делать, когда?Система не может просто знать, что вы хотите в любой момент времени.Теперь вам также необходимо сохранить дополнительные данные с типом «Деньги», в котором указано, как предполагается использовать любое заданное значение.
В итоге ваши столбцы как таковые не могут быть отображены как пользовательский тип.Если вы не можете изменить схему, единственный способ сделать это - отобразить все три столбца как обычные примитивы, а затем создать (и удалить) тип Money в коде приложения.
А для чего кончается?Я действительно удивлен, что даже такой человек, как Фаулер, предлагает такой подход как своего рода «лучшую практику», не задумываясь о реальных деталях.Фактом является то, что большинство данных - это набор, в котором валюта определяется для ряда некоторыми часто неявными или внешними факторами, такими как страна происхождения или страна, в которой работает бизнес и т. Д. И т. Д.
Случаи, когда вы можете дажевалюта, в которой вы нуждаетесь, у вас часто бывает так много другого багажа, который исходит из нескольких валют, таких как текущие обменные курсы и т. д., что наличие валюты в качестве неотъемлемой части типа денег даже не так полезно.Это удобно, но для данных, с которыми очень неудобно работать и которые нельзя сделать иначе.Большую часть времени валюта фиксирована и обычно может быть даже выведена.Таким образом, тип Money в типичных случаях либо не может приблизиться к тому, что вам действительно нужно - конверсия, либо это просто ненужная информация.За некоторыми исключениями, тип Money становится просто чертовски привлекательным для приложения.
Прежде чем тратить много времени на попытки реализовать что-то, возможно, по малой или совсем иной причине, чем люди начали называть это «лучшей практикой», спросите себя, вам когда-нибудь понадобится использовать это длячто-нибудь? * * 1013