У меня есть следующая структура классов. Эти классы являются классами гибернации, поэтому я не могу их изменить.
//assume all getters & setters are present
public class Order{
private Customer customer;
}
public class Customer{
// non generics set
private Set nameParts;
}
public class NamePart{
private String id;
private String name;
}
// target class
public class OrderShippingDetail{
private String firstName;
}
Файл сопоставления
<mapping>
<class-a>Order</class-a>
<class-b>OrderShippingDetail</class-b>
<field>
<a>customer.nameParts[0].name</a>
<b>firstName</b>
</field>
</mapping>
Но это сопоставление dosent customer.nameParts [0] .name работает, поскольку doser-дозатор знает объект в наборе. есть ли обходной путь.
Если это можно сделать только с помощью специального конвертера, приветствуется подсказка шаблона кода.
2 ответа
Я просматривал документацию и обнаружил, что для неуниверсальных коллекций во время глубокого сопоставления можно указать объекты, используя
<field>
<a>customer.nameParts[0].name</a>
<b>firstName</b>
<a-deep-index-hint>com.example.Customer, com.example.NamePart</a-deep-index-hint>
</field>
Пойти на один уровень глубже. нравится
<mapping>
<class-a>Order</class-a>
<class-b>OrderShippingDetail</class-b>
<field>
<a>customer.nameParts[0]</a>
<b>this</b>
</field>
</mapping>
<mapping>
<class-a>{class of object @ nameparts[0]}</class>
<class-b>OrderShippingDetail</class-b>
<field><a>name</a><b>firstname</b></field>
</mapping>
Это работает как обходной путь. Я использовал этот трюк, чтобы заставить его работать в некоторых местах.
Похожие вопросы
Новые вопросы
java
Java - это язык программирования высокого уровня. Используйте этот тег, если у вас возникли проблемы с использованием или пониманием самого языка. Этот тег редко используется отдельно и чаще всего используется вместе с [spring], [spring-boot], [jakarta-ee], [android], [javafx], [hadoop], [gradle] и [maven].