2014-04-04 1 views
-1

Я столкнулся с этой проблемой сегодня и не могу ее решить. У меня есть проект, который содержит класс Domain.Заменить Roo @Id Длинные id с идентификатором @Id Integer на суперкласс не влияет на дочерние классы

@DiscriminatorColumn(name = "type_abrv", columnDefinition = "type_abrv", discriminatorType = DiscriminatorType.STRING) 
@Inheritance(strategy = InheritanceType.SINGLE_TABLE) 
public class Domain { 

    @Id 
    @GeneratedValue(strategy=GenerationType.IDENTITY) 
    private Integer id; 

    @Size(max = 100) 
    private String description; 

    @Size(max = 10) 
    @Column(name = "ABRV") 
    private String abbreviation; 

    @ManyToOne(targetEntity = Domain.class, optional = true, fetch = FetchType.LAZY) 
    @JoinColumn(name = "id_parent", nullable = true, insertable = false) 
    @Cascade({ CascadeType.PERSIST }) 
    private Domain parent = null; 

    @ManyToOne(targetEntity = DomainType.class, fetch = FetchType.LAZY) 
    @JoinColumn(name = "id_type", nullable = true, insertable = false, referencedColumnName = "id") 
    @Cascade({ CascadeType.ALL }) 
    private DomainType type; 

    @Column(name = "ACTIVE") 
    private Boolean active; 
} 

В других проектах, я хочу продлить домен, например:

@Entity 
@RooJpaEntity 
@DiscriminatorValue(value="MSGST") 
public class MessageStatus extends Domain { 
    public static String TYPE_ABRV = "MSGST"; 
    public static String PENDING = "PEND"; 
    public static String PROCESSING = "IN_PROCESS"; 
    public static String PROCESSED = "DONE"; 
} 

Дело в том, Roo генерирует MessageStatus_Roo_Jpa_Entity, содержащий идентификатор длиной, в результате чего конфликт, когда я пытаюсь скомпилировать проект ,

ошибка при бр \ ком \ g4it \ Util \ модель \ домен \ Domain.java :: 0 не может переопределить java.lang.Integer ~ .model.domain.Domain.getId() с Явы. lang.Long ~ .model.queueout.MessageStatus.getId() возвращаемые типы не совпадают

privileged aspect MessageType_Roo_Jpa_Entity { 
    @Id 
    @GeneratedValue(strategy = GenerationType.AUTO) 
    @Column(name = "id") 
    private Long MessageType.id; 

    public Long MessageType.getId() { 
     return this.id; 
    } 

    public void MessageType.setId(Long id) { 
     this.id = id; 
    } 
... 
} 

Итак, мой вопрос: является ли это, что это не возможно, чтобы делать то, что я пытаюсь, или я делаю это неправильно? Каким будет решение?

Я использую STS с Roo Add On и создаю проект с maven. Проект, содержащий домен, присутствует в других проектах pom.xml-файла как зависимость, а также путь сборки STS. Версия Roo - 1.2.3.RELEASE

+0

Ницца, у меня есть негатив, но нет комментариев вообще о том, почему ... – elithin

ответ

1

Spring Roo может обрабатывать только классы из исходного кода (синтаксический анализ .java-файлов) в проектах roo-execute. Итак, если вы включили домен класс из jar, он не может идентифицировать аннотации или атрибуты Домен класс. Это является причиной для генерации поля id для MessageStatus (Roo не может найти).

Чтобы сделать так, вы должны использовать Roo multi module support.

Удачи вам!

+0

Тогда я буду читать. Большое спасибо за указание мне направление. – elithin