我对 hibernate 很陌生,我正在尝试将我拥有的 JDBC 项目转换为 Hibernate。
我正在使用注释,我设法注释了基本的东西,但是,我现在被困在更重的对象上,我不知道如何注释它们。这是类:
@Entity
@Table(name = "person")
public class Person {
public Person{
}
// THIS WILL BE SOON INJECTED BY SPRING
private static transient PhoneNumberUtil phoneUtil = PhoneNumberUtil.getInstance();
private static transient EmailValidator validator = EmailValidator.getInstance();
@Id
@Column(name = "person_id")
@GeneratedValue(strategy = GenerationType.AUTO)
private long id;
@Column(name = "private_name", nullable = false, length = 20)
private String privateName;
@Column(name = "middle_name", length = 20)
private String middleName;
@Column(name = "family_name", nullable = false, length = 20) …Run Code Online (Sandbox Code Playgroud) 当我尝试本教程时,我是 JPA 和休眠的新手 。我在我的persistence.xml中添加了以下提供者,
<provider>org.hibernate.ejb.HibernatePersistence</provider>
Run Code Online (Sandbox Code Playgroud)
我收到这个错误..
log4j:WARN No appenders could be found for logger (org.jboss.logging).
log4j:WARN Please initialize the log4j system properly.
log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info.
Exception in thread "main" java.lang.NoSuchMethodError: org.hibernate.cfg.Configuration.addAnnotatedClass(Ljava/lang/Class;)Lorg/hibernate/cfg/Configuration;
at org.hibernate.ejb.Ejb3Configuration.addAnnotatedClass(Ejb3Configuration.java:1421)
at org.hibernate.ejb.Ejb3Configuration.addNamedAnnotatedClasses(Ejb3Configuration.java:1391)
at org.hibernate.ejb.Ejb3Configuration.addClassesToSessionFactory(Ejb3Configuration.java:1184)
at org.hibernate.ejb.Ejb3Configuration.configure(Ejb3Configuration.java:1048)
at org.hibernate.ejb.Ejb3Configuration.configure(Ejb3Configuration.java:291)
at org.hibernate.ejb.Ejb3Configuration.configure(Ejb3Configuration.java:373)
at org.hibernate.ejb.HibernatePersistence.createEntityManagerFactory(HibernatePersistence.java:56)
at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:48)
at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:32)
at de.vogella.jpa.simple.main.Main.main(Main.java:17)
Run Code Online (Sandbox Code Playgroud)
请帮助解决此错误。谢谢
annotations hibernate jpa persistence.xml hibernate-annotations
我正在尝试使用与枚举值关联的注释字符串值,以获得对关联枚举值的引用。
我最终陷入了中途......目前我有以下开发代码:
注释代码:
public @interface MyCustomAnnotation{
String value();
}
Run Code Online (Sandbox Code Playgroud)
枚举代码:
public enum MyEnum{
@MyCustomAnnotation("v1")
VALUE1,
@MyCustomAnnotation("v2")
VALUE2,
@MyCustomAnnotation("v3")
VALUE3,
}
Run Code Online (Sandbox Code Playgroud)
使用枚举注释:
String matchString = "v1";
MyEnum myEnumToMatch;
// First obtain all available annotation values
for(Annotation annotation : (MyEnum.class).getAnnotations()){
// Determine whether our String to match on is an annotation value against
// any of the enum values
if(((MyCustomAnnotation)annotation).value() == matchString){
// A matching annotation value has been found
// I need to obtain a reference to the corrext Enum value …Run Code Online (Sandbox Code Playgroud) 我有一个要验证的注释(比如电话注释)。我可以使用@phone 验证器来检查电话对象是否有效。我还希望能够将此验证器放在包含电话的联系信息对象上。有没有办法对一个注释使用多个验证器,以便我可以将 @phone 用于我的电话对象和我的联系信息对象?
喜欢
@Constraint(validatedBy = {PhoneIsValid.class, PhoneIsValid2.class})
工作吗?(想法是一个验证器处理电话对象,另一个处理联系信息对象。)
使用参数注释@Nonnull并随后使用对其进行检查是否有意义Preconditions.checkNotNull()?
它们之间有什么区别?据我了解,@Nonnull除非您在IDE中进行了说明,否则using 将仅指定合同,而不会进行进一步检查。它是否正确?
下面的代码是正常工作的mapper类,但是它具有结果集声明的复制内容(在我的情况下这是很大的)。
如何重用@Results声明?
@Mapper
public interface DailyMasterCurrentTradeDao {
@Select("select * from dly_mstr_curr_trd")
@Results({
@Result(property = "accAdsStC", column = "ACC_ADS_ST_C"),
...
})
List<DailyMasterCurrentTrade> selectDailyMasterCurrentTrades();
@Select("select * from dly_mstr_curr_trd where rownum < #{rownumThreshold}")
@Results({
@Result(property = "accAdsStC", column = "ACC_ADS_ST_C"),
...
})
List<DailyMasterCurrentTrade> selectFewDailyMasterCurrentTrades(long rownumThreshold);
}
Run Code Online (Sandbox Code Playgroud) 我正在研究一个从Azure服务总线读取消息的应用程序。该应用程序是使用Spring Boot,Spring jms和Qpid jms客户端创建的。我能够从Queue正确读取消息,而没有任何问题。PFB我用来阅读消息的代码。
@Service
public class QueueReceiver {
@JmsListener(destination = "testing")
public void onMessage(String message) {
if (null != message) {
System.out.println("Received message from Queue: " + message);
}
}}
Run Code Online (Sandbox Code Playgroud)
问题是,对于不同的环境,我们有不同的目的地,例如testingfor dev,testing-qafor qa和testing-prodfor production,所有这些值都分别azure.queueName在不同的application-(ENV).properpties中提供。我想将这些目标动态传递给JmsListener注释中的目标。当我尝试使用
@Value("${azure.queueName}")
private String dest;
Run Code Online (Sandbox Code Playgroud)
并将dest传递给注释 @JmsListener(destination = dest)
我收到The value for annotation attribute JmsListener.destination must be a constant expression错误消息。仔细检查了此错误后,我发现我们无法将动态值传递给注释。请帮助我如何解决此问题或任何其他解决方案。
我想使用共享resx文件来指定所有可翻译的字符串(两者都是为了方便翻译,更重要的是避免使用与DRY原理冲突的数十个单独的resx文件).我使用IStringLocalizer来处理控制器和视图,但我无法弄清楚如何为模型的数据注释实现它.
它通过使用像Models.AccountViewModels.LoginViewModel.en.resx这样的单独文件来工作,但是我如何使用共享资源文件进行数据注释而不是特定注释呢?有人可以分享实施的例子吗?
提前致谢!
PS环境是.Net Core 1.1,因此验证和显示注释都应该在该版本中可用于本地化
我试图在特定字段上使用javax/hibernate自定义验证,但我收到以下错误:
javax.validation.ConstraintDefinitionException: HV000074: com.hertz.digital.hertzrac.model.Code contains Constraint annotation, but does not contain a payload parameter.
at org.hibernate.validator.internal.metadata.core.ConstraintHelper.assertPayloadParameterExists(ConstraintHelper.java:427) ~[hibernate-validator-5.3.5.Final.jar:5.3.5.Final]
at org.hibernate.validator.internal.metadata.core.ConstraintHelper.isConstraintAnnotation(ConstraintHelper.java:407) ~[hibernate-validator-5.3.5.Final.jar:5.3.5.Final]
at org.hibernate.validator.internal.metadata.provider.AnnotationMetaDataProvider.findConstraintAnnotations(AnnotationMetaDataProvider.java:582) ~[hibernate-validator-5.3.5.Final.jar:5.3.5.Final]
at org.hibernate.validator.internal.metadata.provider.AnnotationMetaDataProvider.findConstraints(AnnotationMetaDataProvider.java:535) ~[hibernate-validator-5.3.5.Final.jar:5.3.5.Final]
at org.hibernate.validator.internal.metadata.provider.AnnotationMetaDataProvider.findPropertyMetaData(AnnotationMetaDataProvider.java:234) ~[hibernate-validator-5.3.5.Final.jar:5.3.5.Final]
at org.hibernate.validator.internal.metadata.provider.AnnotationMetaDataProvider.getFieldMetaData(AnnotationMetaDataProvider.java:227) ~[hibernate-validator-5.3.5.Final.jar:5.3.5.Final]
at org.hibernate.validator.internal.metadata.provider.AnnotationMetaDataProvider.retrieveBeanConfiguration(AnnotationMetaDataProvider.java:137) ~[hibernate-validator-5.3.5.Final.jar:5.3.5.Final]
at org.hibernate.validator.internal.metadata.provider.AnnotationMetaDataProvider.getBeanConfiguration(AnnotationMetaDataProvider.java:125) ~[hibernate-validator-5.3.5.Final.jar:5.3.5.Final]
at org.hibernate.validator.internal.metadata.provider.AnnotationMetaDataProvider.getBeanConfigurationForHierarchy(AnnotationMetaDataProvider.java:108) ~[hibernate-validator-5.3.5.Final.jar:5.3.5.Final]
at org.hibernate.validator.internal.metadata.BeanMetaDataManager.createBeanMetaData(BeanMetaDataManager.java:203) ~[hibernate-validator-5.3.5.Final.jar:5.3.5.Final]
at org.hibernate.validator.internal.metadata.BeanMetaDataManager.getOrCreateBeanMetaData(BeanMetaDataManager.java:231) ~[hibernate-validator-5.3.5.Final.jar:5.3.5.Final]
at org.hibernate.validator.internal.metadata.BeanMetaDataManager.isConstrained(BeanMetaDataManager.java:174) ~[hibernate-validator-5.3.5.Final.jar:5.3.5.Final]
at org.hibernate.validator.internal.engine.ValidatorImpl.validate(ValidatorImpl.java:194) ~[hibernate-validator-5.3.5.Final.jar:5.3.5.Final]
at org.springframework.validation.beanvalidation.SpringValidatorAdapter.validate(SpringValidatorAdapter.java:118) ~[spring-context-4.3.9.RELEASE.jar:4.3.9.RELEASE]
at org.springframework.boot.autoconfigure.web.WebMvcValidator.validate(WebMvcValidator.java:69) ~[spring-boot-autoconfigure-1.5.4.RELEASE.jar:1.5.4.RELEASE]
at org.springframework.validation.DataBinder.validate(DataBinder.java:891) ~[spring-context-4.3.9.RELEASE.jar:4.3.9.RELEASE]
at org.springframework.web.method.annotation.ModelAttributeMethodProcessor.validateIfApplicable(ModelAttributeMethodProcessor.java:168) ~[spring-web-4.3.9.RELEASE.jar:4.3.9.RELEASE]
at org.springframework.web.method.annotation.ModelAttributeMethodProcessor.resolveArgument(ModelAttributeMethodProcessor.java:115) ~[spring-web-4.3.9.RELEASE.jar:4.3.9.RELEASE]
at org.springframework.web.method.support.HandlerMethodArgumentResolverComposite.resolveArgument(HandlerMethodArgumentResolverComposite.java:121) ~[spring-web-4.3.9.RELEASE.jar:4.3.9.RELEASE]
at org.springframework.web.method.support.InvocableHandlerMethod.getMethodArgumentValues(InvocableHandlerMethod.java:158) ~[spring-web-4.3.9.RELEASE.jar:4.3.9.RELEASE]
at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:128) ~[spring-web-4.3.9.RELEASE.jar:4.3.9.RELEASE]
at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:97) ~[spring-webmvc-4.3.9.RELEASE.jar:4.3.9.RELEASE] …Run Code Online (Sandbox Code Playgroud) 考虑一个UrlValidator方法注释,该注释在调用方法之前测试给定的URL是否有效。
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface UrlValdator{
String value();
}
Run Code Online (Sandbox Code Playgroud)
当路由是静态的并且提前知道时,这可以正常工作。例如:
@UrlValidator("http://some.known.url")
public void doSomething();
Run Code Online (Sandbox Code Playgroud)
但这不是很灵活。例如,如果路由在doSomething()方法签名中是隐式的,该怎么办?我可以以某种方式通过Spring Expression Language或其他方式访问它吗?例如,这不起作用,但这是我要拍摄的
@UrlValidator("#p1")
public void doSomething(String url)
Run Code Online (Sandbox Code Playgroud)
要么
@UrlValidator("#p1.url")
public void doSomething(Request request)
Run Code Online (Sandbox Code Playgroud)
是否可以通过这种方式使注释动态化?
这是我找到的最接近的东西,但是线程很旧,可以接受的答案非常麻烦/难以遵循。是否有一个最小的工作示例/更新的方式来做到这一点?
annotations ×10
java ×7
hibernate ×3
.net ×1
core ×1
dao ×1
enums ×1
guava ×1
jpa ×1
localization ×1
mybatis ×1
null ×1
spring ×1
spring-boot ×1
spring-jms ×1
validation ×1