У меня есть 3 поля класса сущности, которые я не хочу быть уникальными, но вместо этого я хочу, чтобы они использовались в качестве составных полей для ключа, который должен быть уникальным. Мой класс POJO:Проверка проверки на уникальный составной ключ
@Entity
@Table(name="EMPLOYEE")
public class Employee {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int id;
@Size(min=3, max=50)
@Column(name = "NAME", nullable = false)
private String name;
@Size(min=3, max=50)
@Column(name = "A", nullable = false)
private String a;
@Size(min=3, max=50)
@Column(name = "B", nullable = false)
private String b;
@Size(min=3, max=50)
@Column(name = "C", nullable = false)
private String c;
@NotNull
@DateTimeFormat(pattern="dd/MM/yyyy")
@Column(name = "JOINING_DATE", nullable = false)
@Type(type="org.jadira.usertype.dateandtime.joda.PersistentLocalDate")
private LocalDate joiningDate;
@NotNull
@Digits(integer=8, fraction=2)
@Column(name = "SALARY", nullable = false)
private BigDecimal salary;
@NotEmpty
@Column(name = "SSN", unique=true, nullable = false)
private String ssn;
}
Im работая с представлением формы, проверки ввода данных пользователем с помощью JSR303 аннотациями .В случае ошибки проверки, сообщения об ошибках по умолчанию являются shown.I сконфигурировано ResourceBundleMessageSource:
@Configuration
@EnableWebMvc
@ComponentScan(basePackages = "com.fussa.fyby")
public class AppConfig {
@Bean
public ViewResolver viewResolver() {
InternalResourceViewResolver viewResolver = new InternalResourceViewResolver();
viewResolver.setViewClass(JstlView.class);
viewResolver.setPrefix("/WEB-INF/views/");
viewResolver.setSuffix(".jsp");
return viewResolver;
}
@Bean
public MessageSource messageSource() {
ResourceBundleMessageSource messageSource = new ResourceBundleMessageSource();
messageSource.setBasename("messages");
return messageSource;
}
}
/src/main/resources/messages.properties
Size.employee.name=between {2} and {1} characters long
NotNull.employee.joiningDate=can not be blank
NotNull.employee.salary=are u working for free !
Digits.employee.salary=Only numeric data with max 8 digits and with max 2 precision is allowed
NotEmpty.employee.ssn=can not be blank
typeMismatch=Invalid format
non.unique.ssn=SSN {0} already exist.
я нашел это решение для создания уникального ключа:
@Table(name = "EMPLOYEE",
uniqueConstraints = { @UniqueConstraint(columnNames = { "A", "B", "C" }) })
мой вопрос, как я могу отобразить сообщение, используя messages.properties если UniqueConstraint было нарушено?
UPDATE 1
@Service("employeeService")
@Transactional
public class EmployeeServiceImpl implements EmployeeService {
@Autowired
private EmployeeDao dao;
//....
public void saveEmployee(Employee employee) {
dao.saveEmployee(employee);
}
}
Спасибо за любые советы ..
есть исключение, которое бросило, когда UniqueConstraint нарушается. если да, вы можете получить это исключение и отобразить любое сообщение, которое вы хотите. Просто сугестсион. –