@Test public void testCascadeSomeWithDefaultPersist() throws Exception { reader = getReader( Entity1.class, "field1", "many-to-one.orm8.xml" ); assertAnnotationPresent( ManyToOne.class ); ManyToOne relAnno = reader.getAnnotation( ManyToOne.class ); assertEquals( 4, relAnno.cascade().length ); assertEquals( CascadeType.REMOVE, relAnno.cascade()[0] ); assertEquals( CascadeType.REFRESH, relAnno.cascade()[1] ); assertEquals( CascadeType.DETACH, relAnno.cascade()[2] ); assertEquals( CascadeType.PERSIST, relAnno.cascade()[3] ); }
/** * Make sure that it doesn't break the handler when {@link CascadeType#ALL} * is specified in addition to a default cascade-persist or individual * cascade settings. */ @Test public void testCascadeAllPlusMore() throws Exception { reader = getReader( Entity1.class, "field1", "many-to-one.orm9.xml" ); assertAnnotationPresent( ManyToOne.class ); ManyToOne relAnno = reader.getAnnotation( ManyToOne.class ); assertEquals( 6, relAnno.cascade().length ); assertEquals( CascadeType.ALL, relAnno.cascade()[0] ); assertEquals( CascadeType.PERSIST, relAnno.cascade()[1] ); assertEquals( CascadeType.MERGE, relAnno.cascade()[2] ); assertEquals( CascadeType.REMOVE, relAnno.cascade()[3] ); assertEquals( CascadeType.REFRESH, relAnno.cascade()[4] ); assertEquals( CascadeType.DETACH, relAnno.cascade()[5] ); }
List<CascadeType> cascades = new ArrayList<>( Arrays.asList( manyToOne.cascade() ) ); if ( !cascades.contains( CascadeType.ALL ) && !cascades.contains( CascadeType.PERSIST ) ) { cascades.add( CascadeType.PERSIST );
@Test public void testCascadeAll() throws Exception { reader = getReader( Entity1.class, "field1", "many-to-one.orm7.xml" ); assertAnnotationPresent( ManyToOne.class ); ManyToOne relAnno = reader.getAnnotation( ManyToOne.class ); assertEquals( 1, relAnno.cascade().length ); assertEquals( CascadeType.ALL, relAnno.cascade()[0] ); }
@Test public void testNoJoins() throws Exception { reader = getReader( Entity1.class, "field1", "many-to-one.orm1.xml" ); assertAnnotationPresent( ManyToOne.class ); assertAnnotationNotPresent( JoinColumn.class ); assertAnnotationNotPresent( JoinColumns.class ); assertAnnotationNotPresent( JoinTable.class ); assertAnnotationNotPresent( Id.class ); assertAnnotationNotPresent( MapsId.class ); assertAnnotationNotPresent( Access.class ); ManyToOne relAnno = reader.getAnnotation( ManyToOne.class ); assertEquals( 0, relAnno.cascade().length ); assertEquals( FetchType.EAGER, relAnno.fetch() ); assertTrue( relAnno.optional() ); assertEquals( void.class, relAnno.targetEntity() ); }
@Test public void testAllAttributes() throws Exception { reader = getReader( Entity1.class, "field1", "many-to-one.orm6.xml" ); assertAnnotationPresent( ManyToOne.class ); assertAnnotationNotPresent( JoinColumn.class ); assertAnnotationNotPresent( JoinColumns.class ); assertAnnotationNotPresent( JoinTable.class ); assertAnnotationPresent( Id.class ); assertAnnotationPresent( MapsId.class ); assertAnnotationPresent( Access.class ); ManyToOne relAnno = reader.getAnnotation( ManyToOne.class ); assertEquals( 0, relAnno.cascade().length ); assertEquals( FetchType.LAZY, relAnno.fetch() ); assertFalse( relAnno.optional() ); assertEquals( Entity3.class, relAnno.targetEntity() ); assertEquals( "col1", reader.getAnnotation( MapsId.class ).value() ); assertEquals( AccessType.PROPERTY, reader.getAnnotation( Access.class ) .value() ); }
@Override public void addRelationIntoMetadata(Field relationField, EntityMetadata metadata) { // taking field's type as foreign entity, ignoring "targetEntity" Class<?> targetEntity = relationField.getType(); ManyToOne ann = relationField.getAnnotation(ManyToOne.class); Relation relation = new Relation(relationField, targetEntity, null, ann.fetch(), Arrays.asList(ann.cascade()), ann.optional(), null, // mappedBy is null Relation.ForeignKey.MANY_TO_ONE); boolean isJoinedByFK = relationField.isAnnotationPresent(JoinColumn.class); if (relationField.isAnnotationPresent(AssociationOverride.class)) { AssociationOverride annotation = relationField.getAnnotation(AssociationOverride.class); JoinColumn[] joinColumns = annotation.joinColumns(); relation.setJoinColumnName(joinColumns[0].name()); } else if (isJoinedByFK) { JoinColumn joinColumnAnn = relationField.getAnnotation(JoinColumn.class); relation.setJoinColumnName(StringUtils.isBlank(joinColumnAnn.name()) ? relationField.getName() : joinColumnAnn.name()); } else { relation.setJoinColumnName(relationField.getName()); } relation.setBiDirectionalField(metadata.getEntityClazz()); metadata.addRelation(relationField.getName(), relation); }
private void readManyToOne(ManyToOne propAnn, DeployBeanProperty prop) { DeployBeanPropertyAssocOne<?> beanProp = (DeployBeanPropertyAssocOne<?>) prop; setCascadeTypes(propAnn.cascade(), beanProp.getCascadeInfo()); beanProp.setBeanTable(beanTable(beanProp)); beanProp.setDbInsertable(true); beanProp.setDbUpdateable(true); beanProp.setNullable(propAnn.optional()); beanProp.setFetchType(propAnn.fetch()); }
@Override protected CascadeType[] getCascade(Field field) { return field.getAnnotation(ManyToOne.class).cascade(); } },
/** * INTERNAL: (Overridden in XMLManyToOneAccessor) */ public List<String> getCascadeTypes() { return getCascadeTypes(m_manyToOne.cascade()); }
( property.isAnnotationPresent( MapsId.class ) && !ignoreNotFound ); bindManyToOne( getCascadeStrategy( ann.cascade(), hibernateCascade, false, forcePersist ), joinColumns, !mandatory,
@Override public CascadeType[] getCascadeTypes() { return getRelationshipAnnotation().cascade(); }
private void introspectManyToOne(ManyToOne manyToOne) { Class targetClass = manyToOne.targetEntity(); if (void.class.equals(targetClass)) targetClass = _fieldType; setTargetEntity(targetClass); setCascadeTypes(manyToOne.cascade()); setFetch(manyToOne.fetch()); _isOptional = manyToOne.optional(); }
private void readManyToOne(ManyToOne propAnn, DeployBeanProperty prop) { DeployBeanPropertyAssocOne<?> beanProp = (DeployBeanPropertyAssocOne<?>) prop; setCascadeTypes(propAnn.cascade(), beanProp.getCascadeInfo()); beanProp.setBeanTable(beanTable(beanProp)); beanProp.setDbInsertable(true); beanProp.setDbUpdateable(true); beanProp.setNullable(propAnn.optional()); beanProp.setFetchType(propAnn.fetch()); }
private void readManyToOne(ManyToOne propAnn, DeployBeanProperty prop) { DeployBeanPropertyAssocOne<?> beanProp = (DeployBeanPropertyAssocOne<?>) prop; setCascadeTypes(propAnn.cascade(), beanProp.getCascadeInfo()); BeanTable assoc = factory.getBeanTable(beanProp.getPropertyType()); if (assoc == null) { String msg = errorMsgMissingBeanTable(beanProp.getPropertyType(), prop.getFullBeanName()); throw new RuntimeException(msg); } beanProp.setBeanTable(assoc); beanProp.setDbInsertable(true); beanProp.setDbUpdateable(true); beanProp.setNullable(propAnn.optional()); beanProp.setFetchType(propAnn.fetch()); }
private void readManyToOne(ManyToOne propAnn, DeployBeanProperty prop) { DeployBeanPropertyAssocOne<?> beanProp = (DeployBeanPropertyAssocOne<?>) prop; setCascadeTypes(propAnn.cascade(), beanProp.getCascadeInfo()); BeanTable assoc = factory.getBeanTable(beanProp.getPropertyType()); if (assoc == null) { String msg = errorMsgMissingBeanTable(beanProp.getPropertyType(), prop.getFullBeanName()); throw new RuntimeException(msg); } beanProp.setBeanTable(assoc); beanProp.setDbInsertable(true); beanProp.setDbUpdateable(true); beanProp.setNullable(propAnn.optional()); beanProp.setFetchType(propAnn.fetch()); }
private void readManyToOne(ManyToOne propAnn, DeployBeanProperty prop) { DeployBeanPropertyAssocOne<?> beanProp = (DeployBeanPropertyAssocOne<?>) prop; setCascadeTypes(propAnn.cascade(), beanProp.getCascadeInfo()); BeanTable assoc = factory.getBeanTable(beanProp.getPropertyType()); if (assoc == null) { String msg = errorMsgMissingBeanTable(beanProp.getPropertyType(), prop.getFullBeanName()); throw new RuntimeException(msg); } beanProp.setBeanTable(assoc); beanProp.setDbInsertable(true); beanProp.setDbUpdateable(true); beanProp.setNullable(propAnn.optional()); beanProp.setFetchType(propAnn.fetch()); }
/** * Parse @ManyToOne. */ private void parseManyToOne(FieldMetaData fmd, ManyToOne anno) { if (!JavaTypes.maybePC(fmd.getValue())) throw new MetaDataException(_loc.get("bad-meta-anno", fmd, "ManyToOne")); // don't specifically exclude relation from DFG b/c that will prevent // us from even reading the fk when reading from the primary table, // which is not what most users will want if (anno.fetch() == FetchType.EAGER) fmd.setInDefaultFetchGroup(true); if (!anno.optional()) fmd.setNullValue(FieldMetaData.NULL_EXCEPTION); if (anno.targetEntity() != void.class) fmd.setTypeOverride(anno.targetEntity()); setCascades(fmd, anno.cascade()); fmd.setAssociationType(FieldMetaData.MANY_TO_ONE); }
/** * Parse @ManyToOne. */ private void parseManyToOne(FieldMetaData fmd, ManyToOne anno) { if (!JavaTypes.maybePC(fmd.getValue())) throw new MetaDataException(_loc.get("bad-meta-anno", fmd, "ManyToOne")); // don't specifically exclude relation from DFG b/c that will prevent // us from even reading the fk when reading from the primary table, // which is not what most users will want if (anno.fetch() == FetchType.EAGER) fmd.setInDefaultFetchGroup(true); if (!anno.optional()) fmd.setNullValue(FieldMetaData.NULL_EXCEPTION); if (anno.targetEntity() != void.class) fmd.setTypeOverride(anno.targetEntity()); setCascades(fmd, anno.cascade()); fmd.setAssociationType(FieldMetaData.MANY_TO_ONE); }
getCascadeStrategy( ann.cascade(), hibernateCascade, false, forcePersist ), joinColumns, !mandatory,